#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 実行例: ■サブフォーム内の「商品名」にフォーカスがある状態でクリックしたとき ■サブフォーム内の「販売単価」にフォーカスがある状態でクリックしたとき |
|||
|
Copyright © T'sWare All rights reserved |