Database Access,选择Case ActiveControl。名称?

Database Access,选择Case ActiveControl。名称?,database,vba,ms-access,controls,select-case,Database,Vba,Ms Access,Controls,Select Case,我在表单访问中有两个组合框(c1,c2),带有按钮Search,如果用户从c1中选择一个值并单击Search,则应打开表单1,如果用户从c2中选择一个值并单击Search,则应打开表单2 Private Sub Commande6_Click() Select Case ActiveControl.Name Case "c1" DoCmd.OpenForm "FORM1" Case "c2" DoCmd.Op

我在表单访问中有两个组合框(
c1
c2
),带有按钮Search,如果用户从
c1
中选择一个值并单击Search,则应打开
表单1
,如果用户从
c2
中选择一个值并单击Search,则应打开
表单2

Private Sub Commande6_Click()
    Select Case ActiveControl.Name
        Case "c1"
            DoCmd.OpenForm "FORM1"
        Case "c2"
            DoCmd.OpenForm "FORM2"
        Case Else
            'traitement
     End Select
End Sub

如果您正在单击组合框,然后单击搜索按钮,则组合框不是最后单击的对象,因此它不是活动的-搜索按钮是(
command6


使用ActiveControl将不起作用。单击“搜索”时,控件转到“搜索”按钮

你可以用几种方法来处理。您可以(a)查询两个控件以检测哪一个未设置为默认值,或者(b)跟踪哪一个最后具有焦点(可能使用隐藏控件)


编辑:请参阅ashleydawgs的答案以获取代码。

为什么不起作用?我不知道,当我单击按钮时,它不会显示任何内容。请在该过程开始时添加一个临时行:
MsgBox ActiveControl.Name
。然后尝试这些变化,看看它认为主动控件叫什么。解决办法应该变得非常明显。(我打赌活动控件是搜索按钮,因为那是最后一次点击。它不叫
second to last ActiveControl
:)它显示“command6”是的,或者一个变量。:)虽然我会推荐这种方法(这就是为什么我不把它作为一个答案发布),但对于上一个控件,您确实有
Screen.PreviousControl
。但是,如果您单击了另一个控件(不是中间的
c1
也不是
c2
,而是
屏幕,则此答案也有效。以前的控件
不起作用)它会使thaaank工作youuuuu@ErikvonAsmuth有可能在一个案例中设置两个条件吗??
Public lastCBclicked as String

Private Sub c1_Click()
    lastCBclicked  = ActiveControl.Name
End Sub

Private Sub c2_Click()
    lastCBclicked  = ActiveControl.Name
End Sub

Private Sub Commande6_Click()
  Select Case lastCBclicked  
    Case "c1"
        DoCmd.OpenForm "FORM1"
    Case "c2"
        DoCmd.OpenForm "FORM2"
    Case Else
        'traitement
   End Select
End Sub