Rivediamo come si gestiscono le date in VBA...
Intanto, ho messo anche una routine che elimina tutti i fogli ad eccezione della Centralina, in modo da non stare lì a eliminare foglio per foglio, per giunta con un avviso che appare a ogni eliminazione (settando DisplayAlerts a false).
Sub eliminaTutti()
Application.DisplayAlerts = False
For Each elemento In Sheets
If elemento.Name <> Centralina Then elemento.Delete
Next
Application.DisplayAlerts = True
End Sub
Vediamo dunque le date...
Ecco trovato subito il modo di nominare il nuovo foglio con il nome del mese successivo a quello attuale:
Sub AggiungiFoglio()
Sheets(Sheets.Count).Select
Sheets.Add
ActiveSheet.Name = MonthName(Month(Date) + 1)
ActiveSheet.Move After:=Sheets(Sheets.Count)
Sheets(Centralina).Select
End Sub
Il problema è però che se io provo a schiacciare nuovamente il Button il codice cercherà di creare un altro foglio sempre con lo stesso nome, e nominare due fogli con lo stesso nome non è consentito.Dovrei trovare un modo di gestire l'errore, in modo da impedire, in caso di errore, la creazione di nuovi fogli senza incorrere nel messaggio di errore.
Come si gestiva l'errore in VBA? Con "On Error", mi pare di ricordare, essendo assente il metodo universale del try... catch.
Ristudiamolo...
Ecco, senza ricorrere a On Error, altrimenti poi è facile che si generano casini...
Modificando la routine in modo da leggere il nome dell'ultimo foglio, e se non è uguale al nome del mese successivo, ossia se il foglio del mese successivo non è già stato aggiunto, lo si aggiunge, lo si rinomina e lo si sposta alla fine.
Sub AggiungiFoglio()
Dim NomeMese As String
NomeMese = MonthName(Month(Date) + 1)
Sheets(Sheets.Count).Select
If Sheets(Sheets.Count).Name <> NomeMese Then
Sheets.Add
ActiveSheet.Name = MonthName(Month(Date) + 1)
ActiveSheet.Move After:=Sheets(Sheets.Count)
Sheets(Centralina).Select
End If
End Sub
Nessun commento:
Posta un commento