別ブックのThisWorkbookモジュールのメソッドを呼ぶ(Excel)
別ブックのThisWorkbookモジュールのメソッドを呼ぶ
前回
別ブックのシートモジュールのメソッドを呼ぶ実験をした。
では、別ブックのThisWorkbook
モジュールのメソッドはどうなのだろうか。
コードの追加
まず、ち~んw1号.xlsmのThisWorkbook
モジュールに次のコードを追加する。
リスト1 ち~んw1号.xlsmのThisWorkbookモジュール
Public Sub callHelloWorld() Call Sheet1.helloWorld End Sub
ご覧のとおり、Sheet1
モジュールのhelloWorld
メソッドを呼ぶだけのメソッド。
んで、前回のリスト3(=ち~んw2号.xlsmの標準モジュールのコード)にちょこっとコードを追加する。
リスト2 ち~んw2号.xlsmの標準モジュール
Public Sub testCallSheetObjectProcedure() Dim anotherBook As Workbook ' ち~んw1号.xlsmを開いて変数にぶち込む' Set anotherBook = _ Workbooks.Open(ThisWorkbook.Path & "\ち~んw1号.xlsm") Call anotherBook.callHelloWorld '……(*)' ' 「ち~んw1」シートを変数にぶち込む' Dim targetSheet As Object Set targetSheet = anotherBook.Worksheets("ち~んw1") ' helloWorldメソッドを呼ぶ' Call targetSheet.helloWorld ' ち~んw1号.xlsmを閉じる' Call anotherBook.Close(SaveChanges:=False) ' オブジェクト変数の解放' Set anotherBook = Nothing Set targetSheet = Nothing End Sub
追加したのは(*)の1行だけ。
とりあえず、Workbook
型のオブジェクト変数に「.
」で無理矢理callHelloWorld
をつないでみた。Intellisenseが効かないのでちょっと不安。
実行してみる
リスト2を実行してみると、
イミディエイト・ウインドウにこのように出力された。
つまり、Workbook
型オブジェクトのメソッドであるかのように呼び出すことができた。(コーディング時に入力補完が効かないのが痛いけど。)
おわりに
つまり、Sheet
オブジェクトのモジュールに書いたメソッドは、その所属するブックのThisWorkbook
モジュールに呼び出し窓口的なメソッドを置けば、気軽に呼び出せる、ということになる。