如果更改来自其他功能,则更改事件不会触发

时间:2016-05-19 05:03:08

标签: vba ms-access access-vba

我在表单中有一些控件,我想检测这些控件的所有更改,无论用户或vba是否进行了这些更改。

我尝试这个代码(例如在组合框上):

Private Sub Combo3_Change()
 MsgBox "test"
End Sub

Private Sub Command0_Click()
 Me.Combo3.Value = 5
End Sub

如果用户进行了更改,它会起作用,但是如果我点击进行相同更改的命令按钮,它就不起作用。

我也在更新事件后尝试过,但它不起作用。

注意:我在excel中使用相同的代码,它运行正常。

2 个答案:

答案 0 :(得分:2)

这是设计的。当通过代码更改控件值时,Control_AfterUpdate永远不会运行。

如果您想要运行代码(通常为_AfterUpdate_Change通常没有意义),您需要在进行更改后自行调用。

答案 1 :(得分:1)

您必须非常小心地在Access和Excel表单之间来回切换。它们看起来非常相似,但它们每个都有自己的表单库,并且事件的触发方式不同。组合框在尝试捕捉变化方面尤其麻烦。

确保在进行更改时始终触发代码的一种方法是在更改代码中的值时创建属性并直接更改属性而不是组合框:

Private Property Let Fruit(vNewValue As String)
    Combo3.Value = vNewValue
    Combo3_Change
  End Property

  Private Property Get Fruit() As String
    Fruit = Combo3.Value
  End Property

  Private Sub Combo3_Change()
    Label5.Caption = Combo3.Value
  End Sub

  Private Sub Command2_Click()
    Fruit = "Grapes"
  End Sub