クラスのPrivateメソッドもイミディエイトで実行できる
クラスのPrivateメソッドもイミディエイトで実行できる
再び超小ネタ。
クラスモジュールの準備
クラスモジュールを作る。
リスト1 クラスモジュール
'オブジェクト名は"HiddenBooks"' Private Function isHiddenBook( _ ByVal targetBook As Workbook) As Boolean isHiddenBook = True If targetBook.IsAddin Then Exit Function Dim i As Long For i = 1 To targetBook.Windows.Count If targetBook.Windows(i).Visible Then _ isHiddenBook = False: Exit Function Next End Function
isHiddenBook
というメソッドを1つ書いただけ。
PredeclaredIdをTrueにする
イミディエイトで実行することを考えて、PredeclaredId
をTrue
にする。
一旦、クラスモジュールHiddenBooks
をエクスポートして、エディタで開く。
んで、上の方を
こんなふうにする(8行目です。)。
デフォルトでは、
Attribute VB_PredeclaredId = False
になっているので、「False
」を「True
」に書き換えて保存、再びインポートするだけ。
これで、インスタンス化しなくても[クラス名].[メソッド・プロパティ名]
でメソッドやプロパティにアクセスできる。
実験
イミディエイト・ウインドウに
?HiddenBooks.isHiddenBook(Workbooks("PERSONAL.XLSB"))
と入力して[Enter]をぶっ叩くと、
このように、意図どおりの結果が出る。
「だから何?」と言われても、特に意見はありません。
ちなみに
クラス外から呼ぶのは
当然不可能ですw