VBA技術解説
ブックのいろいろな開き方(GetObject,参照設定,アドイン)

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2020-08-30 最終更新日:2020-08-30

ブックのいろいろな開き方(GetObject,参照設定,アドイン)


VBAで他ブックを開くいろいろな方法について、サンプルVBAで説明・紹介します。


以下の5通りのVBAを紹介します。

以下のサンプルVBAの実行確認

サンプルVBAで開くExcelファイルは以下に置きました。
"D:\sample.xlsm"
標準モジュールに以下のプロシージャーを作成しています。

Sub test()
 MsgBox "test"
End Sub

このExcelブックを開いて、Application.Runでプロシージャー「test」を実行しています。
第127回.他のブックのマクロを実行(Runメソッド)|VBA入門
・Application.Runメソッド ・Application.Runの使用例 ・Application.Runの必要性


普通に開く

Sub 普通に開く()
  Dim wb As Workbook
  Set wb = Workbooks.Open("D:\sample.xlsm")
  
  'プロシージャー「test」を実行
  Application.Run wb.Name & "!test"
  
  '開いたブックを閉じる
  wb.Close savechanges:=False
End Sub

これは最も普通の開き方です。
上記VBAで使っているメソッドの詳細については以下を参照してください。
第63回.ブックを開く(Open)|VBA入門
・Workbooks.Openメソッド ・Openメソッドの使用例 ・Openメソッドの戻り値の使い方 ・Workbooks.Addメソッド ・Openメソッドの関連記事
第64回.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
・ブックを閉じる ・ブックを上書き保存 ・ブックに名前を付けて保存 ・ブックのコピーを保存 ・ブックを閉じる・保存の実践例

別のインスタンスで開く

Sub 別インスタンスで開く()
  Dim xlApp As Object
  Set xlApp = New Excel.Application
  Dim wb As Workbook
  Set wb = xlApp.Workbooks.Open("D:\sample.xlsm")
  
  'インスタンス間での操作には制限があります。
  'プロシージャー「test」を実行
  xlApp.Run wb.Name & "!test"
  
  '開いたブックを閉じる
  wb.Close savechanges:=False
  '別インスタンスのExcelを終了
  xlApp.Quit
  'オブジェクト変数を解放
  Set xlApp = Nothing
End Sub

Dim xlApp As Object
Set xlApp = New Excel.Application
これは、
Dim xlApp As New Excel.Application
このように1行で書いても構いません。

詳しく見れば若干の挙動の違いはありますが、
上記VBAのように、プロシージャー変数としての宣言であれば、他で使用することもないので問題ありません。

別インスタンス間では、行える操作に制限があります。
例えば、RangeのCopyメソッドやWorksheetのCopyメソッドをインスタンス間で使用することはできません。

GetObjectで開く

Sub GetObjectで開く()
  Dim wb As Workbook
  Set wb = GetObject("D:\sample.xlsm")
  Windows(wb.Name).Visible = True '必要に応じて
  
  'プロシージャー「test」を実行
  Application.Run wb.Name & "!test"
  
  '開いたブックを閉じる
  wb.Close savechanges:=False
End Sub

GetObject関数の構文
GetObject([ pathname ], [ class ])

GetObjectの詳細については以下を参照してください。
GetObject関数|VBA関数
・GetObject関数の構文 ・GetObjectの解説 ・GetObject関数の使用例 ・GetObject関数とCreateObject関数の使い分け ・CreateObject関数

Excelの複数のインスタンスが実行されている場合、GetObjectは最初に起動されるインスタンスに接続されます。
したがって、別のインスタンスを指定してGetObjectを実行することはできません。

参照設定で開く

Sub 参照設定で開く()
  '普通のブックでは参照設定された後にエラーが出るので
  On Error Resume Next
  
  'VBA プロジェクト オブジェクト モデルへのアクセスを信頼する
  ThisWorkbook.VBProject.References.AddFromFile "D:\sample.xlsm"
  Dim wb As Workbook
  Set wb = Workbooks(Workbooks.Count)
  
  'プロシージャー「test」を実行
  Application.Run wb.Name & "!test"
  
  '開いたブックを閉じる
  wb.Close savechanges:=False
End Sub

VBEの参照設定への追加をVBAで行っています。

VBA マクロ ブックのいろいろな開き方 GetObject 参照設定 アドイン

参照設定は、通常は外部ライブラリ(外部のオブジェクト)を使用する場合に使用しますが、
同じExcelファイルを参照設定して使う事も出来ます。

ただし、これを使うには、
「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」
これを有効にしておく必要があります。
設定場所は、
「Excelのオプション」→「トラスト センター」→「トラスト センターの設定」→「マクロの設定」
※「トラスト センター」は旧バージョンでは「セキャリティ センター」になります。

VBA マクロ ブックのいろいろな開き方 GetObject 参照設定 アドイン


アドインで開く

Sub アドインで開く()
  AddIns.Add "D:\sample.xlsm"
  AddIns("sample").Installed = True
  Dim wb As Workbook
  Set wb = Workbooks(Workbooks.Count)
  
  'プロシージャー「test」を実行
  Application.Run wb.Name & "!test"
  
  '開いたブックを閉じる
  wb.Close savechanges:=False
  'アドインを無効にします。
  AddIns("sample").Installed = False
End Sub

VBAでアドインに追加・有効化しています。
アドインとして使うのは、必ずしもxlamである必要はありません。
xlsmでもアドインとして登録することができます。

アドインについての詳細は以下を参照してください。
Excelアドインの作成と登録について
・Excelアドインについて ・アドインファイルのフォルダ ・アドインの作り方 ・アドインの登録と有効化 ・ ・アドインで保存するVBA ・アドインを登録するVBA ・アドインを有効化するVBA ・登録されているアドインを確認するVBA ・アドインマネージャーを表示するVBA ・アドイン配布時に自動登録するVBA ・個人用マクロブックについて



同じテーマ「マクロVBA技術解説」の記事

アクティブシート以外のWindowを設定できるWorksheetView
LSetとユーザー定義型のコピー(100桁の足し算)
省略可能なVariant引数の参照不可をラップ関数で利用
ブックのいろいろな開き方(GetObject,参照設定,アドイン)
入力規則への貼り付けを禁止する
Select Caseでの短絡評価(ショートサーキット)の使い方
RangeオブジェクトのFor EachとAreasについて
画像が行列削除についてこない場合の対処
新関数SORTBYをVBAで利用するラップ関数を作成
LAMBDA以降の新関数はVBAで使えるか
数字(1~50)を丸付き数字に変換するVBA


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ