VBA ActiveWorkbookとThisWorkbook
In this Article
このチュートリアルでは、VBAのActiveWorkbookとThisWorkbookの違いについて説明します。
ActiveWorkbookとThisWorkbookの違い
VBAのActiveWorkbookとThisWorkbookの違いを知っておくことは重要です。 ActiveWorkbookは、現在アクティブになっているワークブックです。(ActiveSheetが現在アクティブなシートであるのと同様です。) ThisWorkbookは、VBAコードが格納されているワークブックです。 このワークブックが変更されることはありません。
ThisWorkbook
ThisWorkbookは、現在実行中のコードを含むワークブックを参照することができるオブジェクト変数とお考えください。 このコードでは、ThisWorkbookの名前でMessageBoxを表示します。
Sub Show_ThisWorkbook()
MsgBox ThisWorkbook.Name
End Sub
ActiveWorkbook
ActiveWorkbookは、現在アクティブなワークブックを参照するためのオブジェクト変数です。 このコードでは、ActiveWorkbookの名前でMessageBoxを表示します。
Sub Show_ActiveWorkbook()
MsgBox ActiveWorkbook.Name
End Sub
VBAはActiveWorkbookを想定
ActiveWorkbook内のオブジェクト(例:シート)を操作する場合、ActiveWorkbookオブジェクトを明示的に指定する必要はありません。VBAは、あなたがActiveWorkbookを参照していると仮定します。 そのため、以下のコード:
ActiveWorkbook.Sheets("Sheet1").Range("$A$5").Value = 1
は、次のコードと同じです。
Sheets("Sheet1").Range("$A$5").Value = 1
新しいワークブックや開いたワークブックはアクティブ
新しいワークブックを作成したり、ワークブックを開いたりすると、そのワークブックは「アクティブ」になります。ワークブックを追加し、新しいワークブックの名前を取得するこのコードで、自分の目で確認できます。
Sub Show_ActiveWorkbook_Add()
Workbooks.Add
MsgBox ActiveWorkbook.Name
End Sub
ワークブックを追加したり開いたりした後、ActiveWorkbookオブジェクトを使用して変数に代入することができます。以下の例でその方法を紹介します。
ThisWorkbookとActiveWorkbookの例
アクティブなワークブックを切り替える
Workbook名を使ってアクティブなワークブックを切り替えます。
Workbooks("Book1").Activate
ワークブックの順番を表すインデックスを使用して、アクティブなワークブックを切り替えることもできます。(1 は最初に開かれた、または作成されたワークブック。)
Workbooks(1).Activate
ThisWorkbookをアクティブにする
ThisWorkbook(現在実行中のコードが格納されている)をアクティブにします。
ThisWorkbook.Activate
ActiveWorkbookを変数に設定する
ActiveWorkbookをワークブックオブジェクト変数に代入します。
Dim wb As Workbook
Set wb = ActiveWorkbook
ActiveWorkbookを閉じて保存する
ActiveWorkbookを閉じて保存します。
ActiveWorkbook.Close SaveChanges:=True
保存せずにActiveWorkbookを閉じる
ActiveWorkbookを保存せずに閉じます。
ActiveWorkbook.Close SaveChanges:=False
ActiveWorkbook – 名前を付けて保存
ActiveWorkbookを名前を付けて保存する。
Sub SaveAsActiveWorkbook()
Dim result As Variant
result = Application.GetSaveAsFilename(InitialFileName:="", _)
FileFilter:="Excel マクロ有効ワークブック (*.xlsm), *.xlsm,Excel ワークブック (*.xlsx), *.xlsx")
If result = False Then Exit Sub
ActiveWorkbook.SaveAs result
End Sub