JavascriptProva

lunedì 7 marzo 2016

Creazione di un nuovo foglio con un dato nome in Excel.

Da un elenco di fogli "intoccabile" si copia il tutto su un nuovo foglio rinominato ad hoc.
Bisogna anche gestire l'ipotesi in cui il nuovo foglio già esista.


Sub Macro3()


    Set NewSheet = Sheets.Add
    On Error GoTo ErrHandler
    NewSheet.Name = "Foglio elaborazione"
    Sheets("riserva").Cells.Copy Destination:=NewSheet.Cells

    Exit Sub
ErrHandler:
    NewSheet.Delete
    
End Sub
Con questo codice ci siamo quasi.
Viene aggiunto un nuovo foglio, e viene rinominato, ma c'è una gestione dell'errore nel caso in cui un foglio con questo nome già esista: il foglio viene eliminato.
L'unico neo è che all'atto dell'eliminazione del foglio appare un avviso, come di default ogni qualvolta si elimini un foglio.
La cosa è disattivabile: devo solo ricordare come.

Ecco:
Sub Macro3()


    Set NewSheet = Sheets.Add
    On Error GoTo ErrHandler
    NewSheet.Name = "Foglio elaborazione"
    Sheets("riserva").Cells.Copy Destination:=NewSheet.Cells

    Exit Sub
ErrHandler:
    Application.DisplayAlerts = False
    NewSheet.Delete
    Application.DisplayAlerts = True
End Sub
In questo modo, il tentativo di rinominare un nuovo foglio aggiunto abortisce alla base, in quanto il nuovo foglio aggiunto viene prontamente eliminato, come se non fosse mai stato aggiunto.
Peraltro, provando manualmente a eliminare un foglio della cartella, gli avvisi appaiono come di norma perché l'impostazione Application.DisplayAlerts è settata a false solo per il momento necessario ad eliminare senza "traumi" il foglio appena aggiunto.
Però la cosa sarebbe più completa ed elegante se l'utente potesse avere la possibilità di scegliere se mantenere il vecchio foglio "Foglio Elaborazione", oppure crearne uno nuovo che sia la copia dell'originale, nel caso in cui il foglio sia stato per qualche motivo modificato.
Ci provo...

Ed ecco il risultato finale: si può scegliere se si vuole ricreare il foglio o mantenere quello preesistente.
Sub Macro3()

    
    Set NewSheet = Sheets.Add
    On Error GoTo ErrHandler
    NewSheet.Name = "Foglio elaborazione"
   
    GoTo fine

ErrHandler:
    risposta = MsgBox("Creare un nuovo Foglio Elaborazione?", vbYesNo)
    If risposta = vbYes Then
        Application.DisplayAlerts = False
        Sheets("Foglio elaborazione").Delete
        Application.DisplayAlerts = True
        NewSheet.Name = "Foglio elaborazione"
    Else
        Application.DisplayAlerts = False
        NewSheet.Delete
        Application.DisplayAlerts = True
    End If
    
fine:
     Sheets("riserva").Cells.Copy Destination:=Sheets("Foglio elaborazione").Cells
End Sub

Nessun commento:

Posta un commento