ThisWorkbookモジュールにインターフェースを実装することはできるのか
ThisWorkbookモジュールにインターフェースを実装することはできるのか
前回
ブックのThisWorkbook
モジュールにメソッドを搭載したら、まるでブックのメソッドであるかのように呼び出すことができることを示した。
では、ThisWorkbook
モジュールにインターフェースをImplementsしたら、各ブックに共通メソッドの搭載を強制させることができるのだろうか。
ちょっとやってみた。
インターフェース作り
クラスモジュールを挿入。
ChokiShowable
というアホなオブジェクト名のインターフェースを作成。
で、次のようなコードを書いておく。
リスト1 クラスモジュール
Option Explicit Public Sub showChoki() End Sub
showChoki
というメソッドを書いておく。
このインターフェースを実装したオブジェクトには、必ずshowChoki
メソッドが搭載されていることになる。
ちょうど、マンガ『キン肉マン』に出てきた超人「カニベース」の着ぐるみのようなものだと思ってもらえばよい。カニベースの着ぐるみを着ると、チョキが出せるようになるのだ!
このChokiShowable
インターフェースを、「ち~んw1号.xlsm」、「ち~んw2号.xlsm」それぞれに装着しておく。
プロジェクト エクスプローラーはこんな状態。
インターフェースの実装
今度は、「ち~んw1号.xlsm」のThisWorkbook
モジュールにChokiShowable
インターフェースを実装する。
リスト2 ち~んw1号.xlsmのThisWorkbookモジュール
Option Explicit Implements ChokiShowable Public Sub ChokiShowable_showChoki() Debug.Print "ち~んw1号は チョキを 出した!" End Sub Public Sub callHelloWorld() Call Sheet1.helloWorld End Sub
このように、showChoki
メソッドを搭載。
これでおしまい。ちょっと独特の書き方ですな。
インターフェースメソッドを呼び出す
このshowChoki
メソッドを呼び出すコードを「ち~んw2号.xlsm」の標準モジュールに書く。
リスト3 ち~んw1号.xlsmの標準モジュール
Public Sub testThisWorkbookInterface() Dim anotherBook As Workbook Set anotherBook = _ Workbooks.Open(ThisWorkbook.Path & "\ち~んw1号.xlsm") Dim kaniBase As ChokiShowable '……(1)' Set kaniBase = anotherBook Call kaniBase.showChoki '……(2)' Call anotherBook.Close(SaveChanges:=False) Set anotherBook = Nothing End Sub
「ち~んw1号.xlsm」を開いて変数にぶち込むところまでは前回と同じ。
今回は、こうして得たWorkbook
オブジェクトを(1)の
Dim kaniBase As ChokiShowable
インターフェースChokiShowable
型の変数にぶち込み直す。
これで、Workbook
オブジェクトはカニベースの着ぐるみを着たも同然なので、チョキが出せるはず!
現に、(2)の
Call kaniBase.showChoki
を入力する際には、
このようにIntellisenseが効く!
胸熱!!!!!!!!
実行してみる
リスト3を実行すると……、
あえなくエラーwww
おわりに
さて、どうしたものか……。
追記
中途半端に解決しました。