マイクロソフトアクセス(以下Access)を使っていると、別フォームで値渡しをしたいことがあります。
そんな時は、
ココがポイント
グローバル変数を使って値渡し
をすれば、別フォームでも、別プロシージャ間でも使えるようになるので便利です。
今回もいつものようにスンナリ行かなかったので、そのポイントなども追記しながら備忘録にしました。
グローバル変数
テキストを読んでも今一つ理解力がない自分は「グローバル変数」と言うのも恥ずかしながら最近知りました。
難しい話はこのサイトを参考にしていただくとして、グローバル変数とは、別フォームや、別プロシージャ間で引き継がれる変数の事だと思っています。
プロシージャ内の変数宣言は、
Dim strName As String
ってなりますが、グローバル変数にするには、
Public strName As String
って宣言すればいいようです。
宣言する場所は、どこでも良いようにも思えますが・・・※調べてもわからななかった。
自分の場合は、「MicrosoftAccess クラスオブジェクト」上で右クリックして、「挿入>>標準モジュール」から追加すると、勝手に「Module1」と名前で作成されました。
ココに注意
このModule1の名前の変更ってどうやるの!?
調べたら、F4キーを押すとプロパティが開くのでそこから変更ができました。
流れがずれてしまいましたが、標準モジュール内に、グローバル変数の宣言をします。
ボタンをクリックして変数に値を代入
変数に値を代入する場所で、ちょっと時間が掛かりました。
注意ポイント
フォームのテキストボックスの値を変数に代入するだけなのですが、変な文字が勝手に代入されます。
ポイントは、Me!を頭につけることでした。
自分には、どういう時に「Me!」や「Me.」を使っていいのかが理解できません。
過去に調べてこともありますが、こういう時には、どっちかを突っ込んで動いちゃえばOKって感じになっています。
今回のケースは、Me!でうまくいきました。
別フォーム先で呼び出すだけ
別フォームでグローバル変数を呼び出す時は、Meは必要ありませんでした。
ココがポイント
代入したいテキストボックス=グローバル変数
って感じでやればOKです。
たいした記事の内容ではありませんが、Accessでの開発はちょっとしたことで時間を費やしてしまうような事があるので、備忘録にしておくと便利です。
ココに注意
VBA内でのグローバル変数の書き方で悩みましたので追記
書き方の一例という事で、モジュール1の中に、
Public select_sku As String
を宣言して各VBA内では下記のようにやったらまともに動きました。
select_sku = Me!jan_sku_code
stCD = DCount("*", "job_fba", "[sku] = '" & select_sku & "'")
Me.RecordSource = "Select * From job_fba Where [sku] = '" & select_sku & "'"
カンマとか、ダブルコーテーションなどが間違っているとエラーになるので注意が必要です。