コピー操作によって作成されたワークシートへのハンドルを取得しようとしています。次のコードは、以前は機能していました。
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
ただし、VeryHidden ワークシートをワークブックに追加すると停止しました。今、私の Sheets(Sheets.Count) は、最後に追加したシートの代わりに VeryHidden シートを取得しています。
もちろん使えました
Set ws = Sheets(wsTempl.Name & " (2)")
ws.Name = "p" & pageCount
しかし、それはとても醜いように思えますが、これが本当に唯一の方法ですか? 誰かが別の方法を考えることができますか?
問題を再現するには:
- 新しいワークブックを開き、最初のシートに「テンプレート」という名前を付け、他のシートを削除します
- alt-f11 - コード モジュールを挿入し、上記のコードを貼り付けます
- F5 は、それが機能することを示しているはずです。
- ワークシートを挿入し、ワークシートのタブを使用してコレクションの最後にドラッグします
- VBA IDE で VeryHidden に設定します
- もう一度 F5 キーを押すと、最初のコード リストは失敗するはずです
その理由は、Copy After:= が VeryHidden Sheets の後にコピーされないため、シートの名前を変更するコードの一部が常に VeryHidden Sheet の名前を変更するためです。