次回からは表示しない(ユーザーフォーム)[Excel](4)
次回からは表示しない
さらにシンプルなコードにする
「もうええっちゅうねん!!!!!!!!」という声が聞こえてきそうだが、もう一本だけ。
前回
かなりシンプルになったコードだが、
ThisWorkbook.CustomDocumentProperties.Item("isDisplayable")
というクソ長ったらしい記述が頻発するのがうっとうしい。
で、書き換えてみた。
DocumentProperty型というものがある
オブジェクトブラウザーでテキトーに調べていたら、
「DocumentProperties」というのがあった。「Item」なんていうメンバがあるし、このコレクションの要素っぽい
「DocumentProperty」クラスというのがあって、メンバを見ても
このときのリスト1とほぼ一致しているし、間違いないだろう、と。
要するに、
ThisWorkbook.CustomDocumentProperties.Item("isDisplayable")
を変数にぶち込んでしまえばいいということだ。
ただ、標準モジュールとフォームモジュールをまたがることになるので、とりあえずPublic変数を使うことにした。
書き換えたコード
まずは宣言セクション。
リスト1
Option Explicit Public myDocProp As DocumentProperty
DocumentProperty型の変数myDocPropを宣言する。
お次は、変数ぶち込み用プロシージャ。
リスト2 標準モジュール
Private Sub setDocumentProperty() Set myDocProp = ThisWorkbook.CustomDocumentProperties.Item("isDisplayable") End Sub
フォーム呼び出し用プロシージャとリセット用プロシージャから呼び出すためのプロシージャ。Public変数にユーザー設定のドキュメントプロパティisDisplayableをぶち込む。
Set myDocProp = ThisWorkbook.CustomDocumentProperties.Item("isDisplayable")
を2回も書くのはブサイクなので、1箇所にまとめただけ。
お次はフォーム呼び出し用プロシージャ。
リスト3 標準モジュール
Public Sub testTestForm() Call setDocumentProperty If myDocProp.Value Then TestForm.Show End Sub
さらにカンタンになった。
お次は、フォームのボタンクリック時のイベントプロシージャ。
リスト4 フォームモジュール
Private Sub ButtonOK_Click() If CheckBoxIsRedisplayable Then myDocProp.Value = False End If Unload Me End Sub
これまたおっそろしくカンタン。
あとは、リセット用プロシージャ。
リスト5 標準モジュール
Public Sub resetTestForm() Call setDocumentProperty With myDocProp If Not .Value Then .Value = True End With End Sub
これまたry
これもちゃんと動く。
おわりに
最初に比べてめちゃくちゃシンプルになって、ちょっとビックリしている。
まあ、Public変数を使っているあたりがイマイチなんだろうけれど。
追記
実は、第5弾がありますw