2016-10-28 9 views
0

ワークブックをアクティブにしないでワークブックの最後にコピーしたいと思います。アクティブシートになり、私の新しいシート「(2)テンプレート」、その後ワークシートを有効化せずにコピーする

ThisWorkbook.Sheets("Template").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) 

しかし:

私は最後に私の「テンプレート」シートをコピーするには、このコードを使用します。 コピー後も「テンプレート」を使いたいです。

可能ですか?

答えて

1

可能でしょうか?

そうではありません。 .Copyは新しいシートを有効にします。私はここにWorksheetsコレクションを使用してい

With ThisWorkbook.Worksheets("Template") 
    .Copy after:=ThisWorkbook.Workheets(ThisWorkbook.Worksheets.Count) 
    .Activate 
End With 

お知らせ:しかし、何も(再)後に元のシートをアクティブ化からあなたを停止しません。 Sheetsコレクションには、通常、探しているものではないChartシートなどのワークシート以外のオブジェクトを含めることができます。Worksheestコレクションには実際のWorksheetオブジェクトのみが含まれています。

ThisWorkbook.Worksheetsコレクションのテンプレートシートを見つける必要がなくなり、必要以上にコードが脆弱になることに注意してください。

各Excelオブジェクト(実際にVBAオブジェクトが)あなたがペイン(プレスF4プロパティで編集できること(ワークシートは次のようにラベル付けされているものを指しName財産の上に)(Name)性質を持っていますエディタ) - その名前は合法的なVBA識別子でなければなりません。そして、VBAがやっていることはきれいです。その名前でグローバルスコープのオブジェクト変数を宣言していますので、 "Template"シートの名前をTemplateSheetとすれば:

With TemplateSheet 
    .Copy after:=ThisWorkbook.Workheets(ThisWorkbook.Worksheets.Count) 
    .Activate 
End With 

また、すべての「静的な」ワークシート(つまりshee tsはコードによって生成されません)。 Nameプロパティ(タブラベル)でワークシートを参照すると、ユーザーがタブの名前を変更するとすぐにコードの実行が失敗します。対応するグローバルスコープ識別子を参照することによって、ワークシート・タブに任意のラベルを付けることができます。コードはまったく気にしません。

+0

これらの情報をお寄せいただきありがとうございます。私のケースでは、Activateを使用してプロパティ名を使用します。 – sexyyoda

関連する問題