我在表单中有一些控件,我想检测这些控件的所有更改,无论用户或vba是否进行了这些更改。
我尝试这个代码(例如在组合框上):
Private Sub Combo3_Change()
MsgBox "test"
End Sub
Private Sub Command0_Click()
Me.Combo3.Value = 5
End Sub
如果用户进行了更改,它会起作用,但是如果我点击进行相同更改的命令按钮,它就不起作用。
我也在更新事件后尝试过,但它不起作用。
注意:我在excel中使用相同的代码,它运行正常。
答案 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