次回からは表示しない(ユーザーフォーム)[Excel](2)
変数の値を保存する
WorkbookオブジェクトのCustomDocumentPropertiesコレクションを使う
前回
の続き。
変数の値を保存するには、
- シートに書き込む
- テキストファイルに書き込む
- レジストリに書き込む
ぐらいしか方法がないと思っていたが、チョー有名なOffice TANAKAさんのサイトで
CustomDocumentPropertiesコレクション
というものの存在を知った。
これならできそうだ!
邪道かもしれんけどw
コーディング
まずは、イミディエイトで以下のコードを実行する。
リスト1 イミディエイトウインドウに入力
Thisworkbook.CustomDocumentProperties.Add Name:="isDisplayable", _ LinkToContent:=False, _ Type:=msoPropertyTypeBoolean, _ Value:=True
コイツを入力して、[Enter]を押すと、このWorkbookに、「isDisplayable」という
ユーザー設定のドキュメントプロパティ
とやらが設定される模様。
Addメソッドの引数ValueにTrueを指定しているので、既に値はTrueになっている。
ほらね。
これで準備はおk
お次はフォーム呼び出し用のプロシージャ。
リスト2 標準モジュール
Option Explicit Public isDisplayable As Boolean Public calledCount As Integer Public Sub testTestForm() calledCount = calledCount + 1 If calledCount = 1 Then isDisplayable = True With ThisWorkbook.CustomDocumentProperties.Item("isDisplayable") '……(1)' If Not .Value Then isDisplayable = False End With If isDisplayable Then TestForm.Show '……(2)' End Sub
さきほど設定したユーザー設定のドキュメントプロパティには、
ThisWorkbook.CustomDocumentProperties.Item("isDisplayable")
でアクセス可。
(1)からの3行
With ThisWorkbook.CustomDocumentProperties.Item("isDisplayable") If Not .Value Then isDisplayable = False End With
では、ユーザー設定のドキュメントプロパティ「isDisplayable」がFalseだったら、Public変数の「isDisplayable」をFalseにする。
(2)の
If isDisplayable Then TestForm.Show
では、Public変数の「isDisplayable」の値を調べ、Trueだったらフォームを呼び出すようにしている。
同じ名前にしてしまったのでややこしいが、ユーザー設定のドキュメントプロパティ「isDisplayable」がFalseだったら、ユーザーフォームは呼び出されない、ということになる。
お次は、フォームのボタンクリック時の処理。
リスト3 フォームモジュール
Private Sub ButtonOK_Click() If CheckBoxIsRedisplayable Then isDisplayable = False ThisWorkbook.CustomDocumentProperties.Item("isDisplayable").Value = False End If Unload Me End Sub
チェックボックスにチェックが入っていたら、Public変数の「isDiplayable」をFalseにするとともに、ユーザー設定のドキュメントプロパティ「isDisplayable」もFalseにして、フォームを閉じる。
従って、チェックボックスにチェックを入れて[OK]をクリックすると、ユーザー設定のドキュメントプロパティ「isDisplayable」がFalseになるので、リスト2のフォーム呼び出しプロシージャを実行してもフォームは表示されないことになる。
あとは、リセットボタン用プロシージャ。
リスト4 標準モジュール
Public Sub resetTestForm() calledCount = 0 With ThisWorkbook.CustomDocumentProperties.Item("isDisplayable") '……(3)' If Not .Value Then .Value = True End With End Sub
もはや解説不要だとは思うけれど、(3)からの3行
With ThisWorkbook.CustomDocumentProperties.Item("isDisplayable") If Not .Value Then .Value = True End With
で、ユーザー設定のドキュメントプロパティ「isDisplayable」がFalseだったら、値をTrueにするようにしている。
これで、次にフォーム呼び出しプロシージャを実行したときには、再びフォームが表示されることになる。
実行
画像を貼るのがめんどくさいので省略。
一度チェックボックスをオンにして[OK]をクリックしたら、ブックを閉じて開き直しても、もはやフォームが表示されることはなくなった。
もちろん、[リセット]ボタンをクリックしたら復活しますが。
おわりに
でもたぶん、邪道・大仁田厚
なやり方なんだろうね。
追記
いろいろマヌケなことをしていることに気づいたので、慌てて修正しましたw
んで、最新版がコチラ。
レジストリ使用版もあります。