別ブックのThisWorkbookモジュールのメソッドを呼ぶ(Excel)

別ブックのThisWorkbookモジュールのメソッドを呼ぶ

前回

akashi-keirin.hatenablog.com

別ブックのシートモジュールのメソッドを呼ぶ実験をした。

では、別ブックの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を実行してみると、

f:id:akashi_keirin:20190223201151j:plain

イミディエイト・ウインドウにこのように出力された。

つまり、Workbook型オブジェクトのメソッドであるかのように呼び出すことができた。(コーディング時に入力補完が効かないのが痛いけど。)

おわりに

つまり、Sheetオブジェクトのモジュールに書いたメソッドは、その所属するブックのThisWorkbookモジュールに呼び出し窓口的なメソッドを置けば、気軽に呼び出せる、ということになる。