【问题标题】:Access, Select Case ActiveControl.Name?访问,选择案例 ActiveControl.Name?
【发布时间】:2018-03-26 11:57:27
【问题描述】:

如果用户从 c1 中选择一个值并点击 Search 它应该打开一个FORM1,如果用户从c2 中选择一个值并点击搜索它应该打开FORM2

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

【问题讨论】:

  • 为什么不起作用?
  • 我不知道,当我点击按钮时它没有显示任何内容
  • 在该过程的开头添加一个临时行:MsgBox ActiveControl.Name。然后尝试变体,看看 it 认为主动控件被调用的是什么。解决方案应该变得非常明显。 (我敢打赌,活动控件是“搜索”按钮,因为这是最后一次点击。它不叫2nd-to-last-ActiveControl :)
  • 它显示了'Commande6'

标签: database vba ms-access controls select-case


【解决方案1】:

如果您单击组合框,然后单击 Search 按钮,则组合框不是最后一次单击,因此它不是活动的 - 搜索按钮是 (Commande6在你的情况下)

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

【讨论】:

  • 是的,或者一个变量。 :)
  • 虽然我会推荐这种方法(这就是我不将其作为答案发布的原因),但您确实有 Screen.PreviousControl 用于先前的控制。但是,如果您单击了另一个控件(不是c1c2,而Screen.PreviousControl 没有),此答案也有效
  • 它 wooooks thaaank youuuuu
  • @ErikvonAsmuth 是否可以将 2 个条件放在一个案例中??
【解决方案2】:

使用 ActiveControl 将不起作用。当您单击搜索时,控制转到搜索按钮。

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

编辑:查看 ashleydawgs 的代码答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2012-11-18
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多