ThisWorkbook は、Excel VBA コードが実行されているワークブックを指します。 一方、ActiveWorkbook は、現在フォーカスがある Excel ワークブック、つまり正面を向いている Excel ウィンドウを指します。
Excel VBA 開発者はしばしば、VBA でこれら 2 種類のワークブックを混合します。 問題は、複数の Excel ワークブックで同時に作業し、別の Excel ワークブックが現在アクティブであるときに誤ってワークブックからマクロを実行してしまったときに発生します。 この記事では、Excel VBA の ActiveWorkbook オブジェクトと ThisWorkbook オブジェクトの明確な違いについて説明します。 ただし、どの時点でも 1 つの Excel ワークブックだけがアクティブと見なされます。 アクティブであることは最上位のプロパティであり、現在ウィンドウが選択されているワークブックのみがアクティブとみなされます。 正確な定義は以下をご覧ください
Workbook object that represents the workbook in the active window (the window on top) を返します。
Excel VBA ActiveWorkbook example
'Returns the name of the Active Workbook in Excel VBADebug.Print ActiveWorkbook.Name'Get Sheet1 from the Active WorkbookActiveWorkbook.Sheets("Sheet1")
ThisWorkbook
ThisWorkbookプロパティは、VBAコードが実行されているExcel Workbookを単に参照するので、より理解しやすくなっています。
Will return the Workbook object that represents the workbook where the current VBA macro code is running.
Excel VBA ThisWorkbook の例
'Returns the name of the Workbook which is executing this MacroDebug.Print ActiveWorkbook.Name'Get Sheet1 from the Workbook executing this MacroActiveWorkbook.Sheets("Sheet1")
ActiveWorkbook vs ThisWorkbook
これらの 2 つのプロパティの違いについてまだ混乱している場合は、以下を参照してください。 この場合、このワークブックでマクロを実行すると、ActiveWorkbook プロパティは ThisWorkbook と同じになります。
右側は、Excelワークブックが表示されていない、または最前面のアプリケーションではありません。 この場合、このワークブックでマクロを実行すると、ActiveWorkbook プロパティは左側のワークブックを表し、ThisWorkbook は右側のワークブックを表します。
Conclusions
これらのプロパティを区別できるようになったので、いくつかのことを心に留めておくことが重要です。
- 日常的には、作業中の同じ Workbook でコードが動作すると想定する場合、より誤りやすい ActiveWorkbook より ThisWorkbook を使用します。 Excel AddIn(AddIn ではなく Active Workbook 上でコードを実行する)を使用している場合、ActiveWorkbook プロパティが必要になることがありますが
。