#672 サブフォーム内のアクティブコントロールを取得するには? フォーム、VBA

フォーム内で現在アクティブなコントロール(=フォーカスがあるコントロール)は、下記のような命令(ActiveControl)で取得できます。

Dim strActiveCntrl as string

strActiveCntrl = Me.ActiveControl.Name

        ※ここではそのコントロール名を取得しています。


一方、たとえばフォーム内のあるボタンをクリックした際にその情報を取得しようとすると、クリックした時点でそのボタンにフォーカスが移動してしまっているため、ActiveControlはそのボタン自身になってしまいます。
そのようなときは、ボタンにフォーカスが移動する「直前にアクティブだったコントロール(Screen.PreviousControl)」を調べることで、対象コントロールを取得できます。

Dim strActiveCntrl as string

strActiveCntrl = Screen.PreviousControl.Name


しかし、メイン/サブフォーム形式のフォームにおいて、そのボタンがメインフォーム側にある場合、直前にサブフォーム側にフォーカスがあったとしても、その中のコントロールではなく、Screen.PreviousControlでは「サブフォームコントロール名」が取得されてしまいます。

そこで、もしサブフォーム内に直前にフォーカスがあった場合はさらにその中のどのコントロールがアクティブだったかを取得するには、次のようなコードを使います。

Private Sub アクティブコントロール取得_Click()
   
  Dim strActiveCntrl As String

  If Screen.PreviousControl.Name = "frm商品マスタ_sub" Then
    strActiveCntrl = Me!frm商品マスタ_sub.Form.ActiveControl.Name
    MsgBox strActiveCntrl, vbOKOnly + vbInformation
  End If

End Sub

ここでは、まず「Screen.PreviousControl」の値を調べます。それがサブフォーム名(ここでは"frm商品マスタ_sub")であればさらにその中の「ActiveControl」を取得することで、サブフォーム内のアクティブコントロールを取得しています。


実行例:

■サブフォーム内の「商品名」にフォーカスがある状態でクリックしたとき




■サブフォーム内の「販売単価」にフォーカスがある状態でクリックしたとき


| Index | Prev | Next |



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