ACCESS VBA フォーム名を変数で指定する方法
ACCESS VBAではフォームのテキストボックスに値を入力する処理を作成できます。
[Forms]![売上伝票入力]![小計] = 1
のような形でフォームとテキストボックス名を指定し、右辺に値を入れることで処理が完成します。
こうした処理の中で、左辺側のフォーム名を変数で指定したい場合はどうすればよいでしょうか。
今回は、ACCESS VBAでフォーム名を変数で指定する方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
フォーム名を変数で指定する方法
VBAでフォーム名を変数で指定する際は以下のように記述します。
Forms(フォーム名の変数)
さらに指定したフォームの中にあるコントロール(テキストボックスなど)を指定する際は、
Forms(フォーム名の変数)!コントロール名
で指定することが可能です。
フォーム名を変数で指定する使用例
では、VBAでの実際の使用例を見てみましょう。
以下は、特定のフォーム名が変数:form_nameに格納されている場合、指定したフォームの顧客IDに、選択した顧客IDを反映する、というプロシージャです。
Private Sub 選択_ボタン_Click()
Dim form_name as string
If form_name <> "" Then
'該当フォームが開いていれば顧客IDを反映
If SysCmd(acSysCmdGetObjectState, acForm, form_name) <> 0 Then
Forms(form_name)!顧客ID = Me!顧客ID
DoCmd.Close
form_name = ""
Else
MsgBox "呼び出し元のフォームが開いていません。", vbCritical + vbOKOnly, "反映先フォーム無し"
End If
End If
End Sub
解説します。
指定したフォームの顧客IDへ、現在のフォームの顧客IDを反映する部分は以下のように記述しています。
Forms(form_name)!顧客ID = Me!顧客ID
反映先のフォームが1つだけであれば直接フォーム名を記載すればよいのですが、条件によって反映先のフォームが変わる場合は変数で指定する必要があります。
そのため、上記のような記述方法になっています。
なお、その前に
If SysCmd(acSysCmdGetObjectState, acForm, form_name) <> 0 Then
という条件分岐を入れているのは、該当フォームが開いているかを確認するためです。
開いていないフォームに値を入力しようとするとエラーが出てしまいますので、アクティブなフォーム以外を操作する処理を作成する際は、必ず事前にフォームが開いているかチェックする条件分岐を入れることをお勧めします。
以上、フォーム名を変数で指定する方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。