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 SubCon 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 SubIn 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