Excel VBA Forms.ComboBox在事件发生时未更改
说明 我没有在Excel VBA Forms.ComboBox在事件发生时未更改,excel,vba,combobox,event-handling,Excel,Vba,Combobox,Event Handling,说明 我没有在change事件中更改我的Forms.ComboBox。似乎事件代码没有启动。但确实如此!但是,如果我一步一步地执行代码,它就可以完美地工作。我不明白为什么会这样 应该发生什么: “CauseBox1”更改(用户从其下拉列表中选择) 如果CauseBox1中的值包含单词“reason”,则应启用“CommentaryBox1”。如果没有,则应禁用“CommentaryBox1” 我正在使用一个名为Editing的布尔值,我在代码开头将其设置为True(在代码末尾设置为False)
change
事件中更改我的Forms.ComboBox。似乎事件代码没有启动。但确实如此!但是,如果我一步一步地执行代码,它就可以完美地工作。我不明白为什么会这样
应该发生什么:
- “CauseBox1”更改(用户从其下拉列表中选择)
- 如果CauseBox1中的值包含单词“reason”,则应启用“CommentaryBox1”。如果没有,则应禁用“CommentaryBox1”李>
- 我正在使用一个名为
的布尔值,我在代码开头将其设置为Editing
(在代码末尾设置为True
)。原因是我使用的是MsForms Combobox。即使False
,它们的Application.EnableEvents=False
事件代码也会运行。因此,这是一种预防措施,以确保没有其他Change
事件在该事件发生时运行Change
这里是错误的地方:
更改,并且在其值中找到“原因”CauseBox1
保持禁用状态。我打不进去CommentaryBox1
- 为了启用
,我必须使用CommentaryBox1
单步执行F8
事件代码。然后它突然起作用了李>更改
我在工作表中,不是用户表单。我有一个按钮,可以清除工作表中的所有对象(组合框/文本框)。那个密码把事情搞砸了。最后一段代码,
oCommentary1.Object.Enabled=False
,是导致错误的原因。因为我使用了Change
事件,所以我不需要强制禁用commentation
框。每当我更改该值时(如上面代码中所示),就会触发事件。我真的说不出是什么造成了这个错误。将MsForms.ComboBox(ActiveX)称为对象是否正确
添加断点,然后运行代码。查看它在断开之前触发了哪些。在将工作表(1)更改为工作表名称之前,我有一些类似的操作。很难说没有看到所有的代码。只是有另一个想法。尝试使用Application.screenfresh,看看这是否会改变什么。编辑最初是如何传递给您的下属的?您没有将其作为参数输入,也没有在上面声明它。是否有任何事件与CommentaryBox1关联?这些控件是在用户窗体中还是在工作表表面上?
Private Sub CauseBox1_Change()
If Editing Then Exit Sub
Editing = True
If InStr(1, CauseBox1.Text, "reason") > 0 Then
If CommentaryBox1.Enabled = False Then CommentaryBox1.Enabled = True
Else
If CommentaryBox1.Enabled = True Then CommentaryBox1.Enabled = False
End If
Editing = False
End Sub
Public oDate As OLEObject, oAge As OLEObject, oGender As OLEObject, oInitials As OLEObject
Public oCause1 As OLEObject, oCause2 As OLEObject, oCause3 As OLEObject
Public oCommentary1 As OLEObject, oCommentary2 As OLEObject, oCommentary3 As OLEObject
Sub ClearForm()
With Worksheets("Form")
Set oDate = .OLEObjects("DateBox")
Set oInitials = .OLEObjects("InitialBox")
Set oGender = .OLEObjects("GenderBox")
Set oAge = .OLEObjects("AgeBox")
Set oCause1 = .OLEObjects("CauseBox1")
Set oCause2 = .OLEObjects("CauseBox2")
Set oCause3 = .OLEObjects("CauseBox3")
Set oCommentary1 = .OLEObjects("CommentaryBox1")
Set oCommentary2 = .OLEObjects("CommentaryBox2")
Set oCommentary3 = .OLEObjects("CommentaryBox3")
End With
oDate.Object.Value = ""
oInitials.Object.Value = ""
oGender.Object.Value = ""
oAge.Object.Value = ""
oCause1.Object.Value = ""
oCommentary1.Object.Value = ""
oCause2.Object.Value = ""
oCommentary2.Object.Value = ""
oCause3.Object.Value = ""
oCommentary3.Object.Value = ""
oDate.Activate ' Selects the date box
' Disables the Commentary Boxes (since the Cause Boxes are empty)
oCommentary1.Object.Enabled = False
oCommentary2.Object.Enabled = False
oCommentary3.Object.Enabled = False
End Sub