Ottieni Handle sull'ultimo foglio di lavoro copiato da Worksheet.Copy
-
12-09-2019 - |
Domanda
Sto cercando di ottenere un handle per il foglio di lavoro creato da un'operazione di copia.il seguente codice funzionava:
Dim wsTempl As Worksheet, pageCount as Long
Set wsTempl = Sheets("Template")
For pageCount = 1 To 5
wsTempl.Copy After:=Sheets(Sheets.Count)
Set ws = Sheets(Sheets.Count)
ws.Name = "p" & pageCount
Next
Ma si è interrotto durante l'aggiunta di fogli di lavoro VeryHidden alla cartella di lavoro.ora i miei Fogli (Sheets.Count) ottengono il foglio VeryHidden invece del foglio che ho aggiunto per ultimo.
Certo che potrei usare
Set ws = Sheets(wsTempl.Name & " (2)")
ws.Name = "p" & pageCount
Ma sembra così brutto, è davvero l’unico modo?Qualcuno può pensare ad un altro modo?
per replicare il problema:
- Apri una nuova cartella di lavoro, dai un nome al primo foglio "Modello" ed elimina gli altri fogli
- alt-f11 - inserisci il modulo di codice e incolla il codice sopra
- F5 dovrebbe mostrarti che funziona.
- inserisci un foglio di lavoro, utilizzando le schede del foglio di lavoro trascinalo alla fine della raccolta
- impostalo su VeryHidden nell'IDE VBA
- Ancora F5, il primo elenco di codici dovrebbe fallire
Il motivo sembra essere che Copy After:= non copia dopo VeryHidden Sheets, quindi la parte del codice per rinominare il foglio rinomina sempre VeryHidden Sheet
Soluzione
Il metodo Copia di un foglio di lavoro rende attivo il foglio appena creato, quindi dovresti essere in grado di farlo.
Dim wsTempl As Worksheet, i as int
Set wsTempl = Sheets("Template")
For i = 1 To 5
wsTempl.Copy After:=Sheets(Sheets.Count)
Set ws = ThisWorkbook.ActiveSheet
ws.Name = "p" & pageCount
Next