Un foglio va aggiunto se non ne esiste già uno con lo stesso nome, altrimenti si va incontro all'errore di tentare di rinominare un foglio con il nome di uno già esistente.
Come ho affrontato il problema?
Public Sub aggiungiFoglio() Dim d As Date, nomeFoglio As String d = DateAdd("m", 1, Date) 'attribuisce alla variabile locale d il valore del mese successivo alla data attuale nomeFoglio = MonthName(Month(d)) & " " & Year(d) 'attribuisce alla stringa nomeFoglio mese e anno della variabile locale d Sheets.Add 'aggiunge un nuovo foglio On Error GoTo X 'gestisce l'errore di tentata rinominazione del foglio ActiveSheet.Name = nomeFoglio 'rinomina il foglio con la stringa nomeFoglio. ActiveSheet.Move after:=Sheets(Sheets.Count) 'sposta alla fine della cartella il nuovo foglio formattaFoglio Riga, Colonna, Month(d), Year(d) 'formatta il foglio secondo lo schema Exit Sub X: 'gestione dell'errore di tentata rinominazione del foglio: elimina il foglio senza suscitare avvisi di eliminazione. Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End SubAnalizziamolo pezzo-pezzo...
Dim d As Date, nomeFoglio As String d = DateAdd("m", 1, Date) 'attribuisce alla variabile locale d il valore del mese successivo alla data attuale nomeFoglio = MonthName(Month(d)) & " " & Year(d) 'attribuisce alla stringa nomeFoglio mese e anno della variabile locale dDichiara la variabile d/ di tipo Date e la variabile nomeFoglio di tipo String.
Quindi attribuisce alla variabile d il valore della data odierna aumentata di un mese, e sulla base di questa attribuisce alla variabile nomeFoglio il valore del nome del mese e dell'anno di questa data, uniti in una stringa e separati da uno spazio bianco. Questo sarà il nome del nuovo foglio da aggiungere.
Andiamo avanti:
Sheets.Add 'aggiunge un nuovo foglio On Error GoTo X 'gestisce l'errore di tentata rinominazione del foglio ActiveSheet.Name = nomeFoglio 'rinomina il foglio con la stringa nomeFoglio.Ora aggiunge un nuovo foglio, e cerca di nominarlo con la stringa nomeFoglio comprensiva del nome del mese e dell'anno del mese successivo, ma se viene fuori l'errore di rinominazione di un foglio con il nome di uno già esistente si rimanda all'etichetta X, a fine routine.
Ho preferito gestire l'errore: prima avevo usato un codice che diceva al programma di aggiungere e nominare un nuovo foglio solo se il nome dell'ultimo foglio della cartella non fosse uguale a quello calcolato nella variabile nomeFoglio. Ma così facendo, nel caso in cui il foglio non fosse capitato alla fine si sarebbe potuto incorrere ugualmente nell'errore.
Inoltre, fare in modo che la variabile nomeFoglio fosse confrontata con i nomi di tutti i fogli mi è sembrata una soluzione troppo lunga, nel caso in cui la cartella dovesse contenere molti fogli, da confrontare uno per uno.
Bene, adesso abbiamo, se non c'è stato errore, un nuovo foglio nominato con il nome di mese e anno del mese successivo.
Procediamo mettendolo alla fine di tutti i fogli della cartella e quindi formattandolo secondo il formato prestabilito usando la routine apposita che abbiamo preconfezionato, dopodiché si esce dalla routine e la prima parte del lavoro è conclusa.
ActiveSheet.Move after:=Sheets(Sheets.Count) 'sposta alla fine della cartella il nuovo foglio formattaFoglio Riga, Colonna, Month(d), Year(d) 'formatta il foglio secondo lo schema Exit Sub
Nel caso invece in cui si sia incorsi nell'errore di tentare di rinominare il foglio con il nome di un foglio già esistente, il programma viene gestito con il codice segnato dall'etichetta X, alla quale si viene rimandati dal gestore dell'errore.
X: 'gestione dell'errore di tentata rinominazione del foglio: elimina il foglio senza suscitare avvisi di eliminazione. Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = TrueDisattivando gli avvisi, che in tale contesto sarebbero fastidiosi, di eliminazione di fogli, si elimina semplicemente il foglio appena aggiunto, quindi si ripristinano gli avvisi e la prima parte del lavoro viene conclusa senza l'aggiunta di nuovi fogli.
Nessun commento:
Posta un commento