#779 モジュール上の変数値をコントロールソースで参照するには? フォーム、VBA

フォームモジュールや標準モジュールで宣言された変数は、VBAのコード内では参照できてもコントロールの「コントロールソース」プロパティなどから直接参照することはできません。プロパティシートで「変数名」や「=変数名」といった書き方は無効です。実行時に「#Name?」と表示されてしまいます。

しかし、その変数の値を返すだけの”Functionプロシージャ”を作っておき、それを「コントロールソース」プロパティに設定することで、間接的に変数値を参照することができます。

それには、次のようにしてモジュールやフォームデザインを作成します。

  1. フォームから参照可能な場所(そのフォームのモジュールや標準モジュール)に”変数”および”その変数を返すFunctionプロシージャ”を作成します。

    例(フォームモジュールの場合):

    'フォームから参照する変数の宣言
    Private pVariable As Variant

    Private Function GetVariable() As String
    '変数pVariableの値を返すだけのFunctionプロシージャ

      GetVariable = pVariable

    End Function


  2. そのプロシージャを呼び出す命令をプロパティシートの「コントロールソース」プロパティ欄に記述します。

    例:



  3. あとは任意の位置でその変数に値を代入したり更新したりするコードを記述します。
    次の例ではフォーム読み込み時と2つのコマンドボタンでそれぞれ異なる値を代入しています。
    なお、一度表示したフォームの裏でコード上で変数値を更新した場合には(例ではボタンクリック時)、画面を最新情報に更新するためにフォームの「Recalc」あるいは「Refresh」メソッドも実行する必要があります。

    Private Sub Form_Load()
    'フォーム読み込み時

      pVariable = "あいうえお"

    End Sub

    Private Sub cmd更新1_Click()
    '[更新1]ボタンクリック時

      pVariable = "####はひふへほ####"
      Me.Recalc

    End Sub

    Private Sub cmd更新2_Click()
    '[更新2]ボタンクリック時

      pVariable = #1/1/2024#
      Me.Recalc

    End Sub

実行例:
  • フォームを開いた直後

  • [更新1]ボタンをクリックしたとき

  • [更新2]ボタンをクリックしたとき
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved