Access 2010 组合框事件根本不会触发

Posted

技术标签:

【中文标题】Access 2010 组合框事件根本不会触发【英文标题】:Access 2010 combobox events do not trigger at all 【发布时间】:2019-09-03 19:48:13 【问题描述】:

在 Access 2010 中,我正在努力让组合框强制用户在数据输入表单上输入。在这种情况下,我希望组合框检测到用户根本没有进行任何选择。

我已将包含的代码放在 cbo_Event1 的 OnClick、BeforeUpdate 和 OnChange 事件中。 cmb_StartOfSeason、cmb_EndOfSeason 和 cmb_MoneyRequired 是组合框,将在搜索表单上为用户提供有关 cbo_Event1 的详细信息。所有四个组合框都链接到其他表以查找值。

我已经制作了组合框的绑定 (cbo_Event1) 和未绑定 (cmb_Event) 版本。我还在代码中使用了 Me.cbo_Event1.Value、Me.cbo_Event1.ListIndex 和 Me.cbo_Event1。

Private Sub cbo_Event1_AfterUpdate()
   MsgBox ("Me.cbo_Event1 = " & Me.cbo_Event1 & ".")
   If Me.cmb_Event = 0 Then
      Me.cmb_StartOfSeason = 0
      Me.cmb_EndOfSeason = 0
      Me.cmb_MoneyRequired = 0
   End If
End Sub

Private Sub cbo_Event1_Change()
   MsgBox ("Me.cbo_Event1 = " & Me.cbo_Event1 & ".")
   If Me.cmb_Event = 0 Then
      Me.cmb_StartOfSeason = 0
      Me.cmb_EndOfSeason = 0
      Me.cmb_MoneyRequired = 0
   End If
End Sub

Private Sub cbo_Event1_Click()
   MsgBox ("Me.cbo_Event1 = " & Me.cbo_Event1 & ".")
   If Me.cmb_Event = 0 Then
      Me.cmb_StartOfSeason = 0
      Me.cmb_EndOfSeason = 0
      Me.cmb_MoneyRequired = 0
   End If
End Sub

Private Sub cmb_Event_AfterUpdate()
   MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
   If Me.cmb_Event = 0 Then
      Me.cmb_StartOfSeason = 0
      Me.cmb_EndOfSeason = 0
      Me.cmb_MoneyRequired = 0
   End If
End Sub

Private Sub cmb_Event_BeforeUpdate(Cancel As Integer)
   MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
   If Me.cmb_Event = 0 Then
      Me.cmb_StartOfSeason = 0
      Me.cmb_EndOfSeason = 0
      Me.cmb_MoneyRequired = 0
   End If
End Sub

Private Sub cmb_Event_Change()
   MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
   If Me.cmb_Event = 0 Then
      Me.cmb_StartOfSeason = 0
      Me.cmb_EndOfSeason = 0
      Me.cmb_MoneyRequired = 0
   End If
End Sub

Private Sub cmb_Event_Click()
   MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
   If Me.cmb_Event = 0 Then
      Me.cmb_StartOfSeason = 0
      Me.cmb_EndOfSeason = 0
      Me.cmb_MoneyRequired = 0
   End If
End Sub

我得到了相同的结果:事件组合框在其下拉列表出现时未检测到未进行任何选择。 MsgBox 函数甚至没有触发,表明事件没有发生。我很困惑为什么。

【问题讨论】:

好吧,您是否要考虑空白选择?尝试使用 LEN(Me.cmb_Event.Vaue)>0。我还要确保控件名称正确。 今晚回家后,我将不得不尝试空白选择。我知道我也一直在努力使这些工作。根据我的经验,Access VBA 在处理空值、空字符串、零和空白时非常复杂。 向我们展示该控件标记为“其他”的属性选项卡 这里是要求的屏幕截图。 !Valid Xhtml !Valid XHTML 我没有太多时间来测试空白选择。甚至这些对我来说都是一个谜,发布这些屏幕截图很困难。 【参考方案1】:

我见过的唯一一次没有像这样触发的事件处理程序是在编写(或粘贴)事件处理程序时实际上并没有将它链接到适当的事件属性并且它没有在事件属性表中列出。

如果您通过从下拉列表中选择处理程序来创建Sub 语句,它将把它添加到属性表中,或者可以手动添加。

我想您也尝试过在处理程序的第一条语句上设置断点。如果它没有击中它,则处理程序没有链接到控件。

【讨论】:

好的。我想从现在开始,我将只需要使用属性表中的下拉菜单来帮助确保它们是链接的。另外,我没有意识到我可以在事件处理程序上设置一个断点。我今晚去看看。 这有帮助吗? 事实证明,一个问题肯定是使用属性表插入代码。对于一个崭露头角的 Access 开发人员来说,这是另一个艰难的教训。 :) 第二个也是更复杂的部分是确保我正在测试正确的值。这似乎是一个继续展开的旅程(并且可能更适合另一个线程),尤其是考虑到我上面提到的空值与空字符串、零与空白问题。 Nz 是一个有用的函数,isnull 也是如此。我主要使用 isnull 来检查字段中的空值,尽管 'len(nz(control.value, "")) = 0 可能是更好的检查,因为它也会找到空字符串。如果不允许空值,我只需在用MsgBox 通知用户后执行Cancel = True【参考方案2】:

我认为您的问题与测试错误的值有关。除非您将默认值设置为 0(这是假设没有绑定表),否则控件中很可能永远不会包含 0。而且,如果您尝试测试空值,还有更好的方法可以做到这一点

LEN(TRIM(Me.cmb_Event.Vaue))>0

 ISNULL(Me.cmb_Event.Vaue)=True 

复制您的场景没有问题:

【讨论】:

以上是关于Access 2010 组合框事件根本不会触发的主要内容,如果未能解决你的问题,请参考以下文章

Access VBA - 触发组合框更改事件

Flash/Actionscript2 - 无法触发组合框“更改”事件

Access 2010 中的组合框重复选项

如何在 MS Access 2010 中使用 VBA 选择多值组合框的值?

MS Access 数据表不会根据组合框更新

XAML 组合框 SelectionChanged 触发 OnLoad