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