Articles

excel-vba When To Use ActiveWorkbook and ThisWorkbook

Example

VBAコードが参照するワークブックを常に指定することは、VBAのベストプラクティスとなっています。 この指定が省略された場合、VBA はコードが現在アクティブなワークブック (ActiveWorkbook) に向けられていると見なします。

'--- the currently active workbook (and worksheet) is impliedRange("A1").value = 3.1415Cells(1, 1).value = 3.1415

しかしながら、複数のワークブックが同時に開いている場合 – 特に、VBA コードが Excel アドインから実行されている場合 – ActiveWorkbook への参照は混乱したり誤った方向に向かったりする可能性があります。 たとえば、時刻をチェックし、アドインのワークシート(通常、ユーザーからは見えません)に保存されている値と比較する UDF を持つアドインは、どのワークブックが参照されているかを明示的に特定する必要があります。 この例では、開いている(そしてアクティブな)ワークブックのセルA1 =EarlyOrLate()に数式があり、そのアクティブなワークブック用に書かれたVBAは存在しません。 アドインには、次のユーザー定義関数 (UDF) があります:

Public Function EarlyOrLate() As String If Hour(Now) > ThisWorkbook.Sheets("WatchTime").Range("A1") Then EarlyOrLate = "It's Late!" Else EarlyOrLate = "It's Early!" End IfEnd Function

UDF のコードは、インストールされた Excel アドインに書き込まれ保存されます。 UDFは、アドイン内の「WatchTime」というワークシートに保存されているデータを使用します。 もしUDFがThisWorkbookの代わりにActiveWorkbookを使用していたら、どのワークブックが意図されたものかを保証することはできないでしょう。

コメントを残す

メールアドレスが公開されることはありません。