Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA Forms.ComboBox在事件发生时未更改_Excel_Vba_Combobox_Event Handling - Fatal编程技术网

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
    (在代码末尾设置为
    False
    )。原因是我使用的是MsForms Combobox。即使
    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