次回からは表示しない(ユーザーフォーム)[Excel](5)

次回からは表示しない

まさかの第5弾!!!!!!!!

四天王からのアドヴァイス

(私が勝手に認定している)VBA四天王の一人、 id:imihito さんから、前回の

akashi-keirin.hatenablog.com

にコメントをいただいた。

曰く、

f:id:akashi_keirin:20180127094929j:plain

もとい、

`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プロシージャはクラスモジュールでよく使うイメージだけれど、フォームモジュールでも使えるし、標準モジュールでも使えるんだった。

akashi-keirin.hatenablog.com

論語読みの論語知らず」とはまさにこのことですな。

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 アニキ!

ホントーに、あざす!!!!!!!!

@akashi_keirin on Twitter