用户表单 .setfocus 和 _Change 事件
Userform .setfocus and _Change events
我创建了一个由文本框和下拉菜单组成的用户窗体。这个想法是让用户完成文本框,然后点击“保存”,将输入的值粘贴到 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
事件期间,代码添加item时触发Change
事件是正常的...
您可以通过创建一个 Boolean
变量来解决这个问题,使事件仅在表单初始化后才起作用。像这样:
- 在顶层表单代码模块区(declarations area)声明一个变量:
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
无法正常工作...
我创建了一个由文本框和下拉菜单组成的用户窗体。这个想法是让用户完成文本框,然后点击“保存”,将输入的值粘贴到 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
事件期间,代码添加item时触发Change
事件是正常的...
您可以通过创建一个 Boolean
变量来解决这个问题,使事件仅在表单初始化后才起作用。像这样:
- 在顶层表单代码模块区(declarations area)声明一个变量:
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
无法正常工作...