我有一个带有几个文本框的Excel VBA用户表单。
用户将在文本框中输入权重。然后,他们可以在表单上执行其他操作,或者单击Apply、Update、Previous Event、Next Event或Cancel。
输入权重后,必须对其进行验证,如果确定,则将表单标记为mbFormChanged=True。此验证发生在文本框的AfterUpdate事件中。
我的问题是,如果用户键入一个值,然后立即单击Apply、Update、Previous Event或Next Event,则该字段不会被验证,就好像它从未更改过一样。
即输入权重:200更新
但是,如果用户在键入权重后切换到另一个字段,则会对其进行验证,并将表单标记为已更改。
例如,输入权重: 200Tab
如何确保在单击命令按钮后立即运行AfterUpdate?
我不能将验证放在OK/Apply的位置,因为当用户输入新的权重并生效时,它会立即更新表单上可见的许多其他字段和列表(实时更新)。
发布于 2014-07-03 12:53:25
我假设这是一个Excel用户表单,在这种情况下,我认为没有内置的AfterUpdate事件。Excel表单不绑定到任何内容(与Access不同),因此表单不会更新任何内容。您需要创建自己的AfterUpdate事件。
发布于 2021-11-08 18:32:05
我知道这是一个老的/死的线程,我当然希望原来的问题已经解决了,但是如果其他人正在搜索这个,这里是我在类似情况下所做的:用'Ok‘/ ' done’/‘exit’或任何你用来确认表单条目的按钮打开你的表单,然后在禁用状态下退出表单。这样,当你的数据验证完成后,它们不会做任何事情。一旦你的数据验证完成,启用这些按钮(或圈回更正的条目)。
发布于 2014-07-03 16:19:29
正如评论所说,您可以尝试这样做:
Private Sub TextBox1_Change()
If (MsgBox("Done?", vbYesNo)) = vbYes Then Me.TextBox2.SetFocus 'Or any other ctrl
End Sub上面的代码类似于forces TextBox1_AfterUpdate()事件。
https://stackoverflow.com/questions/24544875
复制相似问题