Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

VBA - Creare Fogli in Cartella di Lavoro con numerazione progressiva

Ultimo Aggiornamento: 13/12/2018 16:57
Post: 1
Registrato il: 11/12/2018
Città: RAVENNA
Età: 51
Utente Junior
Excel 2016
OFFLINE
11/12/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!!
Post: 2.072
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
11/12/2018 13:43

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

saluti



Domenico
Win 10 - Excel 2016
Post: 1
Registrato il: 11/12/2018
Città: RAVENNA
Età: 51
Utente Junior
Excel 2016
OFFLINE
11/12/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..
Post: 4.025
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
11/12/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.

Alfredo
Post: 2
Registrato il: 11/12/2018
Città: RAVENNA
Età: 51
Utente Junior
Excel 2016
OFFLINE
11/12/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..
Post: 4.026
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
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.

Alfredo
Post: 3
Registrato il: 11/12/2018
Città: RAVENNA
Età: 51
Utente Junior
Excel 2016
OFFLINE
11/12/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...
Post: 4.027
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
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.
[Modificato da alfrimpa 12/12/2018 15:41]

Alfredo
Post: 4.028
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
12/12/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.


Alfredo
Post: 4
Registrato il: 11/12/2018
Città: RAVENNA
Età: 51
Utente Junior
Excel 2016
OFFLINE
12/12/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!!!
Post: 4.029
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
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.
[Modificato da alfrimpa 12/12/2018 16:04]

Alfredo
Post: 5
Registrato il: 11/12/2018
Città: RAVENNA
Età: 51
Utente Junior
Excel 2016
OFFLINE
12/12/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à....
Post: 4.030
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
12/12/2018 16:19

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

Alfredo
Post: 6
Registrato il: 11/12/2018
Città: RAVENNA
Età: 51
Utente Junior
Excel 2016
OFFLINE
12/12/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]

Post: 4.031
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
12/12/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]


Alfredo
Post: 7
Registrato il: 11/12/2018
Città: RAVENNA
Età: 51
Utente Junior
Excel 2016
OFFLINE
12/12/2018 16:33

Re: Re: Re:
alfrimpa, 12/12/2018 16.32:



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




[SM=x423030]

Post: 8
Registrato il: 11/12/2018
Città: RAVENNA
Età: 51
Utente Junior
Excel 2016
OFFLINE
13/12/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!
Post: 2.075
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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



[Modificato da dodo47 13/12/2018 11:46]
Domenico
Win 10 - Excel 2016
Post: 9
Registrato il: 11/12/2018
Città: RAVENNA
Età: 51
Utente Junior
Excel 2016
OFFLINE
13/12/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!!!
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 06:04. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com