Ms access VBA表单在代码中设置值后更新,而不是在AfterUpdate()中设置值后更新

Ms access VBA表单在代码中设置值后更新,而不是在AfterUpdate()中设置值后更新,ms-access,forms,vba,Ms Access,Forms,Vba,我有多个组合框和选项框,其可见性根据用户对其他父选项框的选择设置为true或false 我正在为父选项框使用AfterUpdate()函数。这种方法一直很有效 但是,当我在VBA代码(Me.MyOptionBox=1)中设置选项框的值时,没有“更新”使子选项和组合框出现。当我手动单击该选项时,它会起作用,但是如果我在代码中设置它,除了选项框选择之外,没有任何更改。正确设置选项框是没有意义的,但负责检查所选选项的代码不起作用 有没有人对如何避开这个问题有什么想法?我只想在设置选项框的值后更新表单。

我有多个组合框和选项框,其可见性根据用户对其他父选项框的选择设置为true或false

我正在为父选项框使用
AfterUpdate()
函数。这种方法一直很有效

但是,当我在VBA代码(
Me.MyOptionBox=1
)中设置选项框的值时,没有“更新”使子选项和组合框出现。当我手动单击该选项时,它会起作用,但是如果我在代码中设置它,除了选项框选择之外,没有任何更改。正确设置选项框是没有意义的,但负责检查所选选项的代码不起作用

有没有人对如何避开这个问题有什么想法?我只想在设置选项框的值后更新表单。
AfterUpdate()
所指的“更新”是什么

我尝试了
MyForm.Repaint
MyForm.Requery
,但这些都不起作用。

有什么想法吗?

您可以在设置值后直接调用OptionBox\u AfterUpdate()方法。

我确信这是有意的。当您认为控件可以由用户和两种形式的代码(显式和绑定数据)更改时,问题是避免循环递归更新。p> 对于绑定控件,数据中的更改会更改控件

对于用户输入,控件中的更改会更改数据,以及您在事件中明确指定的任何依赖项

对于由代码引起的更改,假设您需要手动应用正在编码的状态更改的所有结果

如果使用绑定控件,则可以更改数据源并自动应用结果。

通过“我正在使用AfterUpdate()函数”,您的意思是为AfterUpdate事件添加了事件处理程序,对吗


如果该处理程序没有在您期望的时候触发,那么您可以在必要时直接调用处理程序(而不是让事件触发它)。但这可能不是最好的方法;更有可能的是,还有另一个事件应该调用您的处理程序,而不是AfterUpdate,或者除了AfterUpdate之外。我不记得组合框事件的名称,但是否有类似ItemChanged或SelectionChanged之类的内容?

在VBA中,大多数控件事件在以编程方式更新而不是手动更新时不会触发。您必须指定编程更新后要运行的代码。

所谓AfterUpdate,我的意思是,我正在为每个选项框的AfterUpdate()上的子框设置可见性。我在更新后尝试了OptionBox_,但我得到了一个语法错误:“预期:=”我很愚蠢。更新后我使用了呼叫选项箱,它工作得非常好。谢谢。需要使用Call通常意味着你有不必要的括号。在这种情况下,OptionBox\u AfterUpdate应该可以正常工作,但OptionBox\u AfterUpdate()需要调用