ACCESS VBA 親フォームの名前を取得する方法
ACCESSのVBAではフォームの名前を取得することが多々あります。
普通に現在利用しているフォームの名前を取得するのであれば、Me.Nameで問題ありません。
さらに、そのフォームにあるコントロールを指定するのであれば、Me!コントロール名で指定できます。
しかし、サブフォームを作っているときは勝手が異なります。
サブフォーム側でMe演算子を使っても、サブフォームの名前しか取得できず、親フォームの名前が取得できないのです。
こうなるとVBAで正しくフォームが指定できずに困ってしまいます。
今回はACCESS VBAで親フォームの名前を取得する方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
親フォーム名の取得
サブフォームから親フォーム名を取得する時は
Me.Parent.Name
を使用します。
Meはサブフォームを指しており、Parnetで親フォームを指定、.Nameでフォーム名を取得しています。
以下のフォームをもとに具体例を示しましょう。
サブフォームに設置したボタンから、メインフォームの名称を取得します。
こちらのフォームはメインフォームとサブフォームから成っています。
デザインビューで見るとこんな形です。
メインフォームの「T_メインフォーム」の中に、サブフォームとして「T_サブフォーム」を入れてあります。
T_サブフォームのデザインビューは以下の通りです。
フッターに「親フォーム名取得」というボタンを設置してあります。
このボタンに設定したイベントプロシージャは以下の通りです。
Private Sub 親フォーム名取得_ボタン_Click()
MsgBox Me.Parent.Name
End Sub
メッセージボックス関数を使って、親フォーム名を表示するようにしています。
では、実際にフォームビューで親フォーム名取得のボタンを押してみましょう。
このように、親フォーム名を表示することができました。
サブフォームの指定
また、VBAで標準モジュールからサブフォームを指定するためには記述に工夫が必要です。
サブフォームから自フォームを指定する時にはMeで指定できるのですが、標準モジュールからだと親フォームの名称も指定する必要があるのです。
例えば、以下はサブフォームを開いたときにサブフォーム内のコントロールを編集不可にするプロシージャです。
サブフォーム側のイベントプロシージャ
Private Sub Form_Open(Cancel As Integer)
Call form_detail_lock(Me.Parent.Name, Me.Name)
End Sub
標準モジュール側のイベントプロシージャ
Public ctl As Control
'画面のロック処理をする際にコントールを識別するための変数。
Public Sub form_detail_lock(oya_form_name As String, form_name As String)
'■■フォームの詳細セクションのロックをする■■■
For Each ctl In Forms(oya_form_name).Controls(form_name).Form.Section(acDetail).Controls
Select Case ctl.ControlType
Case 109, 110, 111
'109:テキストボックス、110:リストボックス,111:コンボボックスの場合
ctl.Enabled = False
ctl.Locked = True
ctl.BackColor = 15921906
Case 106, 108, 112, 119, 122
'106:チェックボックス、108:連結オブジェクトフレーム、112:サブフォーム、119:ActiveXコントロール、122:トグルボタンの場合
ctl.Enabled = False
ctl.Locked = True
Case 104
'104:コマンドボタンの場合
ctl.Enabled = False
End Select
Next
End Sub
サブフォームのコントロールをすべて指定する際に
For Each ctl In Forms(oya_form_name).Controls(form_name).Form.Section(acDetail).Controls
という書き方をしているのが分かると思います。
以上、親フォームの名前を取得する方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。