如何解决用户表单 .setfocus 和 _Change 事件
我发现自己被困在最小的问题上。
我创建了一个由文本框和下拉菜单组成的用户表单。这个想法是让用户完成文本框,然后点击“保存”,将输入的值粘贴到 Excel 工作簿中的相应单元格中。
由于下拉菜单中输入的信息会随着时间的推移而改变,我将文本框格式化为显示用户上次更改该字段的时间。
为此,我在下拉菜单上创建了一个 _CHANGE 事件,并指定如果选择更改,则文本框必须应用 = Now,从而显示日期和时间。这本身就很好用。
问题出现在 USERFORM 初始化的时候。它的代码包含一个 .SETFOCUS 用于下拉菜单以显示其现有值。看起来好像 USERFORM_INITIALISE 上的 .SETFOCUS 充当下拉菜单上的 _CHANGE 事件,这会导致它在用户实际更改字段之前编辑日期和时间。
我该如何改变这种情况?
Private Sub drop_down_menu_change()
textBox.Value = Now
End Sub
Private Sub UserForm_Initialize()
drop_down_menu.AddItem "1"
drop_down_menu.AddItem "2"
drop_down_menu.AddItem "3"
drop_down_menu.AddItem "4"
drop_down_menu.AddItem "5"
drop_down_menu.SetFocus
End Sub
非常感谢您的宝贵帮助!
干杯。
解决方法
在Initialize
事件期间,代码添加项目时触发Change
事件是正常的...
您可以通过创建 Boolean
变量来解决问题,只有在表单初始化后才能使事件起作用。像这样:
- 在顶层表单代码模块区(声明区)声明一个变量:
Private noEvent As Boolean
- 在初始化事件中这样使用它:
Private Sub UserForm_Initialize()
noEvent = True
drop_down_menu.AddItem "1"
drop_down_menu.AddItem "2"
drop_down_menu.AddItem "3"
drop_down_menu.AddItem "4"
drop_down_menu.AddItem "5"
drop_down_menu.SetFocus
noEvent = False
End Sub
- 事件应该转换为:
Private Sub drop_down_menu_change()
if not noEvent Then textbox.Value = Now
End Sub
不幸的是,对于表单控件,EventsEnabled = False
不能正常工作...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。