アクセス修飾子「Friend」とは?
アクセス修飾子「Friend」とは?
勘違いから、マヌケな記事を書いてしまった。
訂正記事を書くのがめんどくさいので(←コラ!)、バッサリ削除して書き直す。
アクセス修飾子「Friend
」は、入門書の類にはまず出てこない。
名前が「Friend
」なのに、友達がいないみたいでかわいそうだ。
FriendとPublicはどう違うのか
とりあえず、個人用マクロブック(プロジェクト名「PersonalUtils
」)のSheet1
オブジェクトモジュールに、次の二つのメソッドを置いてみた。
リスト1 PersonalUtils.Sheet1モジュール
Option Explicit Friend Sub showMessageProtected() Call MsgBox("ち~んw") End Sub Public Sub showMessagePublic() Call MsgBox("ち~んw") End Sub
メソッドの内容はどうでもいいので、なげやりなものにしている。
一つ目のshowMessageProtected
メソッドがFriend
指定、二つ目のshowMessagePublic
メソッドがPublic
指定。
呼び出す
で、こうして作成した個人用マクロブックのSheet1
モジュール上のメソッドを呼び出そうと試みる。
ちなみに、プロジェクトエクスプローラーはこの状態。
「シートモジュール活用その2.xlsm」の標準モジュールから呼び出すのだ。
しかし、このように、Public
メソッドであっても呼び出すことができない。
参照設定していないからである。
そこで、
このように参照設定する。
再度、挑戦。
今度は、Intellisenseが働いている!
よく見ると、ヒントが表示されるのはPublic
指定のshowMessagePublic
メソッドだけで、Friend
指定のshowMessageProtected
の方は表示されていない。
呼び出し用プロシージャを実行してみる。
このように、Friend
指定の方は呼び出すことができない。
一方、
Public
指定の方は、呼び出すことができた。
おわりに
別プロジェクトからオブジェクトモジュールのメソッドを呼び出したり、プロパティを参照したりする場面自体、VBAでは想定しにくいので、いまいち使いどころがよくわからないが、Public
でもなく、Private
でもないこの振る舞いを理解しておくと、いづれ何かの機会に役立つかもしれない???