次回からは表示しない(ユーザーフォーム)[Excel](5)
次回からは表示しない
まさかの第5弾!!!!!!!!
四天王からのアドヴァイス
(私が勝手に認定している)VBA四天王の一人、 id:imihito さんから、前回の
にコメントをいただいた。
曰く、
もとい、
`myDocProp` という名前の`Function`や`Property Get` を定義して、
その中に `Set myDocProp = ThisWorkbook.CustomDocumentProperties.Item("isDisplayable")` を入れるのもありかな、と思います。
SUGEEEEEEEE!!!!!!!!
なるほど! その手があったかーーーーー!
さっそくやってみた
リスト1 標準モジュール
Public Property Let isDisplayable(ByVal isDisplayable_ As Boolean) ThisWorkbook.CustomDocumentProperties.Item("isDisplayable").Value = isDisplayable_ End Property Public Property Get isDisplayable() As Boolean isDisplayable = ThisWorkbook.CustomDocumentProperties.Item("isDisplayable").Value End Property
C#に比べるとずいぶん野暮ったい記法だな、おい。……てなことはさておき。
Public変数を使う代わりに、プロパティにした、ということ。
Propertyプロシージャはクラスモジュールでよく使うイメージだけれど、フォームモジュールでも使えるし、標準モジュールでも使えるんだった。
ThisWorkbook.CustomDocumentProperties.Item("isDisplayable").Value
といううっとうしい記述をPropertyプロシージャの中に封じ込めたので、メインのコード3種がそれぞれ異様にスッキリする。それを今からお目に掛けよう。
まずはフォーム呼び出し用プロシージャ。
リスト2 標準モジュール
Public Sub testTestForm() If isDisplayable Then TestForm.Show End Sub
ついにここまで来たよ!
次。ボタンクリック時のイベントプロシージャ。
リスト3 フォームモジュール
Private Sub ButtonOK_Click() If CheckBoxIsRedisplayable Then isDisplayable = False Unload Me End Sub
これまたかくのごとし!
次! リセット用プロシージャ。
リスト4 標準モジュール
Public Sub resetTestForm() If Not isDisplayable Then isDisplayable = True End Sub
たったこんだけですよ!
もちろん、今まで通りに動く。
おわりに
ちょっとなんかこう、すげえ興奮している!
すげえ、すげえよ!
id:imihito さん……ていうか、id:imihito アニキ!
ホントーに、あざす!!!!!!!!