› Sviluppare funzionalita su Microsoft Office con VBA › Creazione Tasto Copia Foglio Precedente e Cancella Contenuto Celle
-
AutoreArticoli
-
Salve a tutti,
Ho un quesito un po complesso ed allego un file esempio cosi sarà più chiaro. Cose da fare:
1. Tramite il tasto copia foglio collegato ad una macro: Copiare foglio precedente denominato Cassa del 06-01-2020 e rinominarlo con data progressiva (Es: foglio Cassa del 06/01/2020 lo deve rinominare Cassa del 07/01/2020 e cosi via essendo presente il tasto in ogni foglio mi dovrebbe creare il foglio del giorno successivo in base al calendario.
2. lo stesso tasto di copia foglio dovrebbe eliminare nel foglio creato i contenuti di alcune celle che nel file esempio ho colorato di giallo.
3. Nella cella rossa del nuovo foglio dovrebbe essere riportato il dato presente nella cella verde pero del foglio precedente.
è possibile? faciliterebbe il mio lavoro e quello di tutti grazie mille a tutti quelli che mi daranno una mano.
Allegati:
You must be logged in to view attached files.Si può fare, ma chiaramente occorre conoscere il linguaggio VBA .
Se non lo conosci può essere il momento giusto per iniziare a studiarlo.
Se invece non lo conosci, direi che fai prima a fartelo a mano.Facci sapere le tue intenzioni.
Purtroppo non conosco bene il linguaggio VBA sono abbastanza avanti però purtroppo non avendo le basi è tutto più lungo. Piano piano sto iniziando ma questa funzione mi servirebbe per lavoro e non penso di riuscirci da solo e speravo che qualcuno mi aiutasse a capire ed aiutarmi a scrivere il codice con più facilità.
Grazie mille a tutti
Se ho capito.
ti posto queste due righe di codice, incollali in un modulo,e poi esegui il codice postato nella macro"albatros54Post22269", forse fa quello che hai chiesto.
Option Explicit Sub albatros54Post22269() Dim p As String Dim q As Single Dim d As String Cells.Select p = ActiveSheet.name q = ActiveSheet.Range("o68") d = aume(p) Selection.Copy Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Paste Range("a3:t44").FormulaR1C1 = "" ActiveSheet.name = d ActiveSheet.Range("a56") = q Range("a1").Select End Sub Public Function aume(m) Dim MyArray As Variant, data As Variant Dim stringa As String, f As String, nomeaumentato As String Dim name As String Dim rng As Range Dim nome As Variant Dim aumento As Long stringa = ActiveSheet.name MyArray = Split(stringa) nome = MyArray(2) data = Split(nome, "-") aumento = (data(0)) + 1 If Len(aumento) < 2 Then aumento = "0" & (data(0)) + 1 Else aumento = (data(0)) + 1 End If f = aumento & "-" & data(1) & "-" & data(2) nomeaumentato = MyArray(0) & " " & MyArray(1) & " " & f aume = nomeaumentato End FunctionQual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Certo che ti aiutiamo, te l'ho chiesto perché non conosciamo nulla della tua preparazione/intenzioni.
Per la copia puoi usare il metodo Copy dell'oggetto Worksheet
WORKSHEET
https://docs.microsoft.com/it-it/office/vba/api/excel.worksheetsCOPY
https://docs.microsoft.com/it-it/office/vba/api/excel.worksheet.copyUna volta copiato il foglio devi selezionare le celle da azzerare usando l'oggetto Range:
https://docs.microsoft.com/it-it/office/vba/api/excel.range(object)selezionando le celle da azzerare:
Selezione di celle e intervalli utilizzando procedure di Visual Basic in Excel
https://docs.microsoft.com/it-it/office/troubleshoot/office-developer/select-cells-rangs-with-visual-basicInfine, assolutamente indispensabile, è la BASE per imparare a fare il DEBUG del proprio codice per vedere e capire cosa fa il codice, come trovare gli errori e di conseguenza come correggerli, senza il quale è impossibile imparare a programmare (qualsiasi linguaggio):
Debugging in Excel VBA - Easy Excel Macros
https://www.excel-easy.com/vba/examples/debugging.htmlMS Excel 2013: VBA Debugging Introduction
https://www.techonthenet.com/excel/macros/vba_debug2013.phpInizia e se hai difficoltà il FORUM è qui!
Albratos:
Mi stupisco sempre quando si sciorinano decine e decine di righe di codice che non hanno alcun scopo didattico, non c'è nemmeno una, dico una, riga di commento che spieghi all'utente il come e perché, nessuna indicazione 'didattica'. Niente! Solo codice...
Lo trovo aoncora più strano se fatto addirittura da un MODERATORE che dovrebbe conoscere a menadito il REGOLAMENTO il cui scopo è tutt'altro...
Un FORUM TECNICO dovrebbe supportare l'utente stimolandolo ad imparare, a farlo crescere, affinché possa risolva da solo i propri problemi, permettendogli di generare in lui quel senso di soddisfazione che gli infonde fiducia e la speranza che anche lui possa, pian piano, acquisire sempre più padronanza.
Questo comportamento avrebbe uno scopo in un forum 'informativo' che non ha nessun scopo didattico, main un forum tecnico è assurdo, perché chi lo frequenta si aspetta di imparare, di capire, scopire, è curioso, vuole migliorare.
Comportarsi così significa già disilludere l'utente, come se gli dicessimo:
Non conosci il VBA? Allora te lo faccio io, da solo non ce la farai mai.Chiaramente OGNUNO ha il sacrosanto diritto di comportarsi come meglio crede e pensarla comne vuole, ma da un MODERATORE mi aspetterei l'esempio di un comportamento consono al REGOLAMENTO.
Evidentemente sono io che sbaglio e non ho capito nulla.
Caro gibra hai ragione su tutta la linea ma devo dire che apprezzo sia il tuo commento che quello di albatros. Certo il suo codice con dei commenti sarebbe stato più utile. Il tuo di gran lunga più educativo anche se per la fretta che ho e le poche competenze attualmente ci metterei una vita ma stai sicuro che incomincerò a leggere e cercare di capire. Grazie mille ad entrambi provo e vi aggiorno.
Comunque non mi interessa più partecipare in un forum che non mantiene coerenza, che afferma una cosa e poi ne fa un'altra.
Vi saluto e buona continuazione.
Comunque non mi interessa più partecipare in un forum che non mantiene coerenza, che afferma una cosa e poi ne fa un'altra.
Vi saluto e buona continuazione.
Non voglio far polemica, non è nel mio DNA,nella mia lunga esperienza lavorativa e di vita, ho incontrato molte persone che sono state poco coerente nel loro modo di fare, ma non per questo li ho allontanate anzi, ho cercato di correggere il loro operato.
Poi da noi c'è un detto che recita "Ogni testa è tribunale", tradotto "Ognuno decide il proprio comportamento".gioacchino
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Ciao Albatros,
Giusto per chiudere il discorso mi sembra una reazione un po esagerata. Anche perchè sono io a decidere se il tuo aiuto mi interessa o meno. Ed io l'ho trovato utilissimo anche perchè il codice non è perfetto ma io ho capito dove modificarlo per quello che mi serviva. ti allego codice modificato:
Option Explicit Sub albatros54Post22269() Dim p As String Dim q As Single Dim d As String Cells.Select p = ActiveSheet.name q = ActiveSheet.Range("o68") d = aume(p) Selection.Copy Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Paste Range("a3:t44").FormulaR1C1 = "" Range("a60").FormulaR1C1 = "" Range("a64").FormulaR1C1 = "" Range("a68").FormulaR1C1 = "" Range("a72").FormulaR1C1 = "" Range("e56:j70").FormulaR1C1 = "" Range("k56:r62").FormulaR1C1 = "" Range("o64").FormulaR1C1 = "" ActiveSheet.name = d ActiveSheet.Range("a56") = q Range("a1").Select End Sub Public Function aume(m) Dim MyArray As Variant, data As Variant Dim stringa As String, f As String, nomeaumentato As String Dim name As String Dim rng As Range Dim nome As Variant Dim aumento As Long stringa = ActiveSheet.name MyArray = Split(stringa) nome = MyArray(2) data = Split(nome, "-") aumento = (data(0)) + 1 If Len(aumento) < 2 Then aumento = "0" & (data(0)) + 1 Else aumento = (data(0)) + 1 End If f = aumento & "-" & data(1) & "-" & data(2) nomeaumentato = MyArray(0) & " " & MyArray(1) & " " & f aume = nomeaumentato End FunctionMancava qualche cella all'interno della formula che cancellava i contenuti.
Senti ho un piccolo problema che non capisco da cosa possa dipendere:
1. Quando utilizzo il tasto copia foglio crea tutto in modo corretto l'unico problema è che effettua una sorta di zoom su tutta la pagina ed inoltre mi ingrandisce il tasto Stampa che ti trovi in basso sulla destra e che ho evidenziato nel foglio allegato.
Nel file allegato ho gia eseguito la funzione in modo da farti vedere come viene ingrandito il foglio ed il tasto stampa.
Spero potrai aiutarmi sei stato utilissimo.
Allegati:
You must be logged in to view attached files.Ciao Albatros,
Ho riscontrato anche un altro problema di codice che non so come posso risolverlo quando arrivo al 31-01-2020 invece di passare al 01-02-2020 mi crea un foglio Cassa del 32-01-2020. Non riusciamo a fargli cambiare in automatico il giorno come una sorte di calendario attivo?
Ti allego nuovo file
Allegati:
You must be logged in to view attached files.aggiungi , subito dopo la riga
ActiveSheet.Range("a56") = qdella routine "albatros54Post22269"
questa riga di codice
ActiveWindow.Zoom = 55Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )perfetto lo zoom della pagine è apposto.
rimane il problema dell'ingrandimento del tasto "Stampa"
e dell'aggiornamento data come da calendario
riesci a darmi una mano a risolvere anche se ti serve più tempo non fa niente
Allegati:
You must be logged in to view attached files.Albatros riesci ad aiutarmi a finire il codice senza errori?
Grazie mille in anticipo
ciao a tutti
Sono riuscito ad eliminare il problema dell'ingrandimento del tasto stampo facendo i seguenti passaggi:
Cliccando sull'immagine ----> Dimensioni e Proprietà -----> Attivare opzione "Sposta e ridimensiona con le celle" all'interno della scheda proprietà.
Resta ora solo il problema del cambio data a fine mese qualche uomo/donna di buon cuore mi aiutaaaaaaaa 🙂
Grazie a tutti
nella funzione "Aume" ho dichiarato la variabile "nome" come Data.
Option Explicit Sub albatros54Post22269() Dim p As String Dim q As Single Dim d As String Cells.Select p = ActiveSheet.name q = ActiveSheet.Range("o68") d = aume(p) Selection.Copy Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Paste Range("a3:t44") = "" Range("a60") = "" Range("a64") = "" Range("a68") = "" Range("a72") = "" Range("e56:j70") = "" Range("k56:r62") = "" Range("o64") = "" ActiveSheet.name = "Cassa del " & d ActiveSheet.Range("a56") = q ActiveWindow.Zoom = 55 Range("a1").Select End Sub Public Function aume(m) Dim MyArray As Variant, data As Variant Dim stringa As String, f As String, nomeaumentato As String Dim name As Date Dim rng As Range Dim nome As Date Dim aumento As String stringa = ActiveSheet.name MyArray = Split(stringa) nome = MyArray(2) nomeaumentato = nome + 1 nomeaumentato = Replace(nomeaumentato, "/", "-") aume = nomeaumentato End FunctionQual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Albatrosssssssssss funziona alla grandeeeeeee.
Grazie.
Posto il codice modificato e corretto. Grazie mille.
Option Explicit Sub albatros54Post22269() Dim p As String Dim q As Single Dim d As String Cells.Select p = ActiveSheet.name q = ActiveSheet.Range("o68") d = aume(p) Selection.Copy Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Paste Range("a3:t44").FormulaR1C1 = "" Range("a60").FormulaR1C1 = "" Range("a64").FormulaR1C1 = "" Range("a68").FormulaR1C1 = "" Range("a72").FormulaR1C1 = "" Range("e56:j70").FormulaR1C1 = "" Range("k56:r62").FormulaR1C1 = "" Range("o64").FormulaR1C1 = "" ActiveSheet.name = "Cassa del " & d ActiveSheet.Range("a56") = q ActiveWindow.Zoom = 55 Range("a1").Select End Sub Public Function aume(m) Dim MyArray As Variant, data As Variant Dim stringa As String, f As String, nomeaumentato As String Dim name As Date Dim rng As Range Dim nome As Date Dim aumento As String stringa = ActiveSheet.name MyArray = Split(stringa) nome = MyArray(2) nomeaumentato = nome + 1 nomeaumentato = Replace(nomeaumentato, "/", "-") aume = nomeaumentato End Function -
AutoreArticoli
