giovedì 11 settembre 2014

Creare un nuovo foglio col nome del mese successivo... una sola volta!

Adesso il foglio aggiunto dovrà avere il nome del mese.
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