次回からは表示しない(ユーザーフォーム)[Excel](3)
結局……
WorkbookオブジェクトのCustomDocumentPropertiesコレクションを使うんだから、もはやPublic変数は必要なかった、という話。
今回使用するユーザーフォームについては、コチラの記事をどうぞ。
コードの修正
前回
のコードを修正する。
メンドクサイので、いきなり修正後のコードを列挙する。
まずは、フォーム呼び出し用プロシージャ。
リスト1 標準モジュール
Public Sub testTestForm() If ThisWorkbook.CustomDocumentProperties.Item("isDisplayable").Value Then _ TestForm.Show End Sub
なんと、たったのこれだけ。実質1行w
ユーザー設定のドキュメントプロパティisDisplayableがTrueのときだけフォームを呼び出す。
C#みたいにusingが使えたら、もっとカンタンに書けるのに。
んで、お次はフォームのボタンクリック時のイベントプロシージャ。
リスト2 フォームモジュール
Private Sub ButtonOK_Click() If CheckBoxIsRedisplayable Then ThisWorkbook.CustomDocumentProperties.Item("isDisplayable").Value = False End If Unload Me End Sub
これまたたったのこれだけ。ボタンクリック時にチェックボックスの値を調べ、チェックボックスの値がTrueだったら、ユーザー設定のドキュメントプロパティisDisplayableをFalseにする。
あとは、リセット用のプロシージャ。
リスト3 標準モジュール
Public Sub resetTestForm() With ThisWorkbook.CustomDocumentProperties.Item("isDisplayable") If Not .Value Then .Value = True End With End Sub
これまたたったのこれだけ。
ユーザー設定のドキュメントプロパティisDisplayableがFalseの場合にTrueに戻す。
これで、呼び出せなくなっていたフォームが再び呼び出し可能になる。
おわりに
Excelの場合、保持しておきたいデータはワークシートに書き込んでおけば良いのだから、基本的にこんなアクロバチックなことはせんでも良いと思うが、こんな方法もあるのだなあ、ということで。
次はレジストリもやってみようかなあ。割と簡単そうだし。