3

コピー操作によって作成されたワークシートへのハンドルを取得しようとしています。次のコードは、以前は機能していました。

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

しかし、それはとても醜いように思えますが、これが本当に唯一の方法ですか? 誰かが別の方法を考えることができますか?

問題を再現するには:

  1. 新しいワークブックを開き、最初のシートに「テンプレート」という名前を付け、他のシートを削除します
  2. alt-f11 - コード モジュールを挿入し、上記のコードを貼り付けます
  3. F5 は、それが機能することを示しているはずです。
  4. ワークシートを挿入し、ワークシートのタブを使用してコレクションの最後にドラッグします
  5. VBA IDE で VeryHidden に設定します
  6. もう一度 F5 キーを押すと、最初のコード リストは失敗するはずです

その理由は、Copy After:= が VeryHidden Sheets の後にコピーされないため、シートの名前を変更するコードの一部が常に VeryHidden Sheet の名前を変更するためです。

4

1 に答える 1

4

ワークシートのCopyメソッドを使用すると、新しく作成されたシートがアクティブになるため、これを実行できるはずです。


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

于 2009-08-08T15:01:09.610 に答える