ACCESS アクティブなフォームの名前を取得する方法

アクティブなフォームの名前を取得する方法

ACCESSでは現在使用されているフォームをアクティブな状態と呼びます。

通常、VBAでイベントプロシージャを実行する際はアクティブなフォームに対して実行することが多くなります。
その際は、Meを使えば現在のアクティブフォームを指定できるのですが、これが使えないこともあります。

今回は、そうしたときに利用できるアクティブなフォームの名前を取得する方法をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

Screen.ActiveForm.Name

現在のアクティブなフォームを取得するには、下記のように記述します。

Screen.ActiveForm.Name

これは3つの構成要素からなっています。

最初のScreenは現在フォーカスがあるフォームやレポート、コントロールを指すオブジェクトです。

次のActiveFormはScreenオブジェクトに対するプロパティで、フォーカスのあるフォームを指します。

最後のNameはさらにそのプロパティでアクティブフォームの名前を返す、という構造です。

利用例

では、実際にアクティブフォームの名前を取得する利用例を示します。
以下のフォームを作成しました。

フォーム名、ボタンを押すとアクティブフォームの名前を表示するようにしています。
フォーム名ボタンのクリック時イベントには以下のプロシージャを設定しました。


 Private Sub フォーム名_ボタン_Click()

    MsgBox "現在のフォーム名は" & Screen.ActiveForm.Name & "です。"

 End Sub
 

先ほどご紹介した、Screen.ActiveForm.NameをMsgBox関数で表示させています。

フォームビューで実際にボタンを押してみましょう。

このように、メッセージボックスでアクティブなフォーム名が表示されました。

Me.Nameとの違い

ところで、アクティブなフォームを表す際にACCESSでよく利用するのがMeキーワードです。
Me!コントロール名、やMe.Filterなどが良く使われます。

Meキーワードについては以下の記事にもまとめていますので興味がある方はご覧ください。

Meキーワードの使用方法

そうすると、Me.Nameでもアクティブフォームの名前が取得できるのではないでしょうか?

答えはYesです。
例として、先ほどのフォームにMe表示ボタンを追加しました。

イベントプロシージャは以下のように設定しました。


 Private Sub Me表示_ボタン_Click()

    MsgBox "現在のフォーム名は" & Me.Name & "です。"

 End Sub
 

Screen.ActiveForm.Nameの部分をMe.Nameに置き換えています。
こちらを実行してみましょう。

このように全く同じ結果が得られました。

Screen.ActiveForm.Nameを利用するシーン

では、Screen.ActiveForm.Nameを使わずに、Me.Nameを常に使えばよいかというとそういうわけではありません。
Me.Nameでは対応できないケースがあるのです。

それは、

フォームAから別フォームBをイベントプロシージャ内で開いた上で、フォームAのイベントプロシージャ内でフォームBの名称を取得する場合

です。

ちょっとややこしいので具体例を示しましょう。
先ほどのフォーム「T_Active」から別フォーム「T_Active2」を開き、「T_Active2」の名前を取得するケースを考えます。

Me表示のボタンのイベントプロシージャを以下のように変更しました。

 Private Sub Me表示_ボタン_Click()

    DoCmd.OpenForm "T_Active2"
    MsgBox "現在のフォーム名は" & Me.Name & "です。"

 End Sub
 

DoCmd.OpenForm “T_Active2″が追加されています。

では、実行してみましょう。

このように、Me.Nameを使う場合ですと「T_Active」の方のフォーム名を取得してしまいます。
これでは困りますね。

一方、Screen.ActiveForm.Nameを使って同じことをしてみましょう。
プロシージャは以下です。


 Private Sub フォーム名_ボタン_Click()

    DoCmd.OpenForm "T_Active2"
    MsgBox "現在のフォーム名は" & Screen.ActiveForm.Name & "です。"

 End Sub
 

実行してみます。

Active2の方の名称が想定通りに取得できました。

このように、アクティブではないフォームのイベントプロシージャから、アクティブフォームの名称を取得する際はScreen.ActiveForm.Nameを利用することになります。

以上、アクティブなフォームの名前を取得する方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。