VBA - Creare Fogli in Cartella di Lavoro con numerazione progressiva

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
raven286k1
00martedì 11 dicembre 2018 11:43
Buongiorno a tutti!
Ho da poco scoperto questo bellissimo Forum e spero possiate essermi d'aiuto per quello che devo fare:

Avrei necessità di inserire una macro che attivandola mi crei in automatico ad ogni esecuzione (pensavo di inserire un pulsante) un nuovo foglio (all'interno della mia cartella di lavoro) numerato progressivamente (che tiene conto dell'ultimo numero raggiunto)
Il foglio nuovo creato non dovrebbe essere un semplice foglio vuoto ma bensì essere una copia del foglio che prendo a modello, che ha nome "Schedanuova".

Ho trovato nel forum varie istruzioni che mi permettono di creare appunto nuovi fogli numerati progressivamente:


Dim Nsh As Long
Nsh = Worksheets.Count
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Nsh + 1).Name = Nsh + 1
End Sub

Sub SelezionaUltima()
Sheets(Worksheets.Count).Select
End Sub

Perfetto... ad ogni esecuzione mi crea un nuovo foglio con numero progressivo.. 1,2,3.
Il nuovo foglio però è il classico vuoto...
Quello che mi servirebbe sarebbe integrare il codice perchè mi crei fogli nuovi numerati progressivamente ma sulla base di un foglio-modello già esistente in cartella con nome "SChedanuova".

Grazie a tutti per l'eventuale aiuto!!
dodo47
00martedì 11 dicembre 2018 13:43
ciao
perchè non usi il registratore di macro e poi adatti il codice alle tue necessità ?

saluti



raven286k1
00martedì 11 dicembre 2018 15:29
dodo47, 11/12/2018 13.43:

ciao
perchè non usi il registratore di macro e poi adatti il codice alle tue necessità ?

saluti




Vorrei ma sono poco pratico purtroppo con tutto quello che riguarda la scheda Sviluppo e le Macro..
alfrimpa
00martedì 11 dicembre 2018 15:39
Re:
raven286k1, 11/12/2018 15.29:

Vorrei ma sono poco pratico purtroppo con tutto quello che riguarda la scheda Sviluppo e le Macro..



E' molto semplice.

Vai sulla scheda Sviluppo
In alto a sinistra trovi Registra macro
Fai le operazioni manualmente
Al termine clicca su Interrompi registrazione e nell'editor di VBA (per visualizzarlo premi Alt+F11) ti ritroverai il codice.
raven286k1
00martedì 11 dicembre 2018 16:40
Re: Re:
alfrimpa, 11/12/2018 15.39:



E' molto semplice.

Vai sulla scheda Sviluppo
In alto a sinistra trovi Registra macro
Fai le operazioni manualmente
Al termine clicca su Interrompi registrazione e nell'editor di VBA (per visualizzarlo premi Alt+F11) ti ritroverai il codice.

Grazie a tutti per le risposte. Avevo già provato prima di rivolgermi a voi ed effettivamente lui mi registra le varie azioni per la creazione di un nuovo foglio di lavoro ma non riesco a fargli fare una cosa automatica in modo che mi crei un nuovo foglio già con il numero progressivo corretto partendo dall’ultimo creato e utilizzando il foglio “Scheda” come modello per i nuovi..
alfrimpa
00martedì 11 dicembre 2018 18:34
Visto che sinora non lo hai fatto sarebbe il caso che allegassi un file di esempio e su questo spiegassi quello che vuoi fare.
raven286k1
00martedì 11 dicembre 2018 21:27
Re:
alfrimpa, 11/12/2018 18.34:

Visto che sinora non lo hai fatto sarebbe il caso che allegassi un file di esempio e su questo spiegassi quello che vuoi fare.



Certamente...
Eccolo....

Premendo il Pulsante nel Foglio RIEPILOGO vorrei che si creasse un nuovo foglio che riprenda la numerazione dall'ultimo creato (nel caso dell'esempio dal 2).
Il nuovo foglio dovrebbe essere una copia del foglio SCHEDANUOVA.

Il Top (ma non chiedo tanto ci ragionerò poi in un secondo momento) sarebbe che una volta creato il foglio es. 3 nella scheda RIEPILOGO si andassero a completare i riferimenti di Cella corrispondenti...
alfrimpa
00mercoledì 12 dicembre 2018 12:35
Ciao Raven

Ti riallego il tuo file dove ho inserito la macro che vedi qui e che è associata al pulsante "Crea Nuova Scheda" sul foglio "Riepilogo"

vb
Sub DuplicaFogli()
    Dim i As Integer
    Dim ur As Long
    Application.ScreenUpdating = False
    Sheets("Schedanuova").Range("ba:ba").ClearContents
    For i = 3 To Sheets.Count
        ur = Sheets("Schedanuova").Cells(Rows.Count, "BA").End(xlUp).Row
        Sheets("Schedanuova").Cells(ur + 1, "BA").Value = CInt(Sheets(i).Name)
    Next i
    Sheets("Schedanuova").Copy After:=Sheets(Sheets.Count)
    ActiveSheet.Name = WorksheetFunction.Max(Sheets("Schedanuova").Range("BA:BA")) + 1
    ActiveSheet.Range("BA:BA").ClearContents
    Application.ScreenUpdating = True
    ActiveSheet.Range("A1").Select
End Sub


Sul foglio "Schedanuova" c'è una colonna nascosta (la BA) che occorre per la determinazione del numero del nuovo foglio.

Per quanto riguarda l'ultima domanda la questione è, almeno per me un po' più complessa.

Se tu sul foglio "Riepilogo" hai delle formule che puntano ai fogli come fai ad inserirne altre quando i fogli non esistono ancora?

Secondo me va trovato un diverso approccio.

Ovviamente se la cartella dovesse contenere pi di 46 fogli le formule dovranno essere ricopiate dalla riga 50 in poi; in questo caso, però, più formule metti più il file si rallenta.

Fai sapere.
alfrimpa
00mercoledì 12 dicembre 2018 15:34
Ciao Raven

Forse ho risolto anche il problema dell'aggiornamento del foglio Riepilogo.

Ti riallego il tuo file dove sul foglio Riepilogo

da B4 a B50 ho inserito questa formula

vb
=SE.ERRORE(INDIRETTO("'"&RIF.RIGA(A1)&"'!$a$1");"")


da C4 a C50

vb
=SE.ERRORE(INDIRETTO("'"&RIF.RIGA(A1)&"'!$B$1");"")


da D4 a D50

vb
=SE.ERRORE(SE(INDIRETTO("'"&RIF.RIGA(A2)&"'!$v$25")="x";0;INDIRETTO("'"&RIF.RIGA(A2)&"'!$v$22"));"")


da E4 a E50

vb
=SE.ERRORE(INDIRETTO("'"&RIF.RIGA(A1)&"'!$v$26");"")


da G4 a G50

vb
=SE.ERRORE(INDIRETTO("'"&RIF.RIGA(C1)&"'!$b$3");"")


Ora dopo aver aggiunto i nuovi fogli andando a compilarli il foglio Riepilogo dovrebbe aggiornarsi automaticamente.

raven286k1
00mercoledì 12 dicembre 2018 15:55
Re:
alfrimpa, 12/12/2018 12.35:

Ciao Raven

Ti riallego il tuo file dove ho inserito la macro che vedi qui e che è associata al pulsante "Crea Nuova Scheda" sul foglio "Riepilogo"

vb
Sub DuplicaFogli()
    Dim i As Integer
    Dim ur As Long
    Application.ScreenUpdating = False
    Sheets("Schedanuova").Range("ba:ba").ClearContents
    For i = 3 To Sheets.Count
        ur = Sheets("Schedanuova").Cells(Rows.Count, "BA").End(xlUp).Row
        Sheets("Schedanuova").Cells(ur + 1, "BA").Value = CInt(Sheets(i).Name)
    Next i
    Sheets("Schedanuova").Copy After:=Sheets(Sheets.Count)
    ActiveSheet.Name = WorksheetFunction.Max(Sheets("Schedanuova").Range("BA:BA")) + 1
    ActiveSheet.Range("BA:BA").ClearContents
    Application.ScreenUpdating = True
    ActiveSheet.Range("A1").Select
End Sub


Sul foglio "Schedanuova" c'è una colonna nascosta (la BA) che occorre per la determinazione del numero del nuovo foglio.

Per quanto riguarda l'ultima domanda la questione è, almeno per me un po' più complessa.

Se tu sul foglio "Riepilogo" hai delle formule che puntano ai fogli come fai ad inserirne altre quando i fogli non esistono ancora?

Secondo me va trovato un diverso approccio.

Ovviamente se la cartella dovesse contenere pi di 46 fogli le formule dovranno essere ricopiate dalla riga 50 in poi; in questo caso, però, più formule metti più il file si rallenta.

Fai sapere.



Alfredo!!!
Non immagini che favore mi hai fatto!
E' semplicemente P E R F E T T O !!! [SM=x423028]
Esattamente quello che cercavo!
Davvero grazie tanto per il tuo aiuto.
Spero a buon rendere ma dubito visto il tuo livello di competenze!!
Grazie ancora!!!
alfrimpa
00mercoledì 12 dicembre 2018 16:00
Grazie a te del riscontro.

Dimenticavo di dire due cose:

1) i fogli "Riepilogo" e Schedanuova" devono essere i primi due della cartella; non vanno mai spostati.

2) Forse è meglio che tu protegga il foglio "Riepilogo" per prevenire una cancellazione accidentale delle formule.

Devo anche rendere omaggio all'amico Canapone (anch'egli frequentatore di questo forum) per il risolutivo aiuto sulle formule con le quali io zoppico parecchio.
raven286k1
00mercoledì 12 dicembre 2018 16:13
Re:
alfrimpa, 12/12/2018 16.00:

Grazie a te del riscontro.

Dimenticavo di dire due cose:

1) i fogli "Riepilogo" e Schedanuova" devono essere i primi due della cartella; non vanno mai spostati.

2) Forse è meglio che tu protegga il foglio "Riepilogo" per prevenire una cancellazione accidentale delle formule.

Devo anche rendere omaggio all'amico Canapone (anch'egli frequentatore di questo forum) per il risolutivo aiuto sulle formule con le quali io zoppico parecchio.




Perfetto! Chiarissimo!
Ringrazio quindi anche Canapone per il prezioso aiuto!

Provando il file (che ripeto è perfetto), qualora un domani volessi aggiungere al foglio RIEPILOGO la colonna H con i riferimenti alle celle V25 di ogni nuovo foglio (cella che dovrebbe contenere il valore di Vendita del pezzo) che formula dovrei inserire?

=SE.ERRORE(INDIRETTO("'"&RIF.RIGA(A1)&"'!$v$25");"")

Grazie ancora per la preziosa disponibilità....
alfrimpa
00mercoledì 12 dicembre 2018 16:19
Credo di si ma ripeto io con le formule faccio a cazzotti.
raven286k1
00mercoledì 12 dicembre 2018 16:21
Re:
alfrimpa, 12/12/2018 16.19:

Credo di si ma ripeto io con le formule faccio a cazzotti.




Provato e confermo che funziona con quella formula!!! Che Spettacolo!!!! [SM=x423038]

alfrimpa
00mercoledì 12 dicembre 2018 16:32
Re: Re:
raven286k1, 12/12/2018 16.21:




Provato e confermo che funziona con quella formula!!! Che Spettacolo!!!! [SM=x423038]




Per me gli spettacoli sono altri [SM=g27828] [SM=g27828]

raven286k1
00mercoledì 12 dicembre 2018 16:33
Re: Re: Re:
alfrimpa, 12/12/2018 16.32:



Per me gli spettacoli sono altri [SM=g27828] [SM=g27828]




[SM=x423030]

raven286k1
00giovedì 13 dicembre 2018 10:42
Dopo vari test sul file posso dire che è perfetto!

Ho fatto qualche piccola modifica e per completarlo e renderlo funzionale al 100%, vorrei poter fare in modo che nella colonna A del foglio riepilogo ad ogni riga ci fosse il collegamento ipertestuale al relativo foglio.
Ho inserito manualmente questa formula nelle prime celle:

=COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]1!$A$1";B4)
=COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]2!$A$1";B5)
=COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]3!$A$1";B6)
e così via... e funziona! Ma devo copiarla su 1000 righe e se copio la formula nelle celle sottostanti EXCEL non mi aggiorna il riferimento al foglio, che rimane sempre [TRATTORIOK.xlsm]1!...
mentre vorrei che a seconda della riga puntasse a [TRATTORIOK.xlsm]2!, [TRATTORIOK.xlsm]3!, [TRATTORIOK.xlsm]4! etc.. in automatico.

Esiste un modo?

Se non fosse possibile lo farò manualmente perchè già così sono pienamente soddisfatto!!

Grazie a tutti!
dodo47
00giovedì 13 dicembre 2018 11:46
Ciao
puoi provare in A4:

=COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]" & RIF.RIGA()-1 &"!$A$1";B4)

trascinando in basso finchè serve.

Nel momento che inserisci in col. B il numero del foglio, in A vedrai il numero con il collegamento.

saluti



raven286k1
00giovedì 13 dicembre 2018 16:57
Re:
dodo47, 13/12/2018 11.46:

Ciao
puoi provare in A4:

=COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]" & RIF.RIGA()-1 &"!$A$1";B4)

trascinando in basso finchè serve.

Nel momento che inserisci in col. B il numero del foglio, in A vedrai il numero con il collegamento.

saluti







Grazie dodo47 per la stringa!
L' ho dovuta leggermente modificare perché inserita nella cella A4 mi crea sì un collegamento ipertestuale ma al foglio 3 e non al foglio 1...
Se copio la formula nelle celle sottostanti stesso problema... puntano a +2 fogli oltre quello indicato nella colonna B

Ho modificato così:

=COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]" & RIF.RIGA()-3 &"!$A$1";B4)

In questo modo funziona! Collegamenti ai fogli corretti!!

Grazie ancora!!!
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 20:56.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com