首页 文章

在代码中设置值而不是AfterUpdate()之后的VBA表单更新

提问于
浏览
2

我有多个组合和选项框,其可见性设置为true或false,具体取决于用户对其他父选项框的选择 .

我正在使用 AfterUpdate() 函数作为父选项框 . 这种方法一直很好 .

但是,当我在VBA代码( Me.MyOptionBox = 1 )中设置选项框的值时,没有"update"来使子选项和组合框出现 . 它在我手动点击该选项时有效,但是如果我在代码中设置它,除了选项框选择之外没有任何变化 . 看到选项框设置正确但负责检查选择哪个选项的代码不起作用是没有意义的 .

有没有人对如何解决这个问题有任何想法?我只想在设置选项框的值后更新表单 . 无论如何 AfterUpdate() 指的是什么"update"?

我试过 MyForm.RepaintMyForm.Requery ,但这些都不起作用 .
有任何想法吗?

4 回答

  • 1

    您可以在设置值后直接调用OptionBox_AfterUpdate()方法 .

  • 1

    我很确定这是故意的 . 当您考虑用户可以通过两种形式的代码(显式和绑定数据)更改控件时,问题是避免循环递归更新 .

    对于绑定控件,数据中的更改会更改控件 .

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

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

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

  • 1

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

  • 0

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

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

相关问题