" Excel已停止工作"使用VBA宏时有on change事件

时间:2015-04-01 15:50:26

标签: excel excel-vba onchange vba

我遇到了一致的“Excel已停止工作”错误。我有一个用户表单,根据用户在第一个组合框中选择的内容填充具有相关下拉选项的组合框。

当用户在第二个组合框中键入与现有值相对应的字母时,为我的on-change事件子 ANY 创建一致错误在第二个盒子里。如果用户从下拉列表中选择一个选项,则不会发生 - 仅当用户键入匹配值的第一个字母时。

示例:如果第一个组合框是“Fruit”,则第二个组合选项可能是“Apple”,“Orange”等。如果用户在第二个框中键入“A”或“O”(因为它与相应的匹配)值),它崩溃Excel。为什么它不像在第一个组合框上那样简单地“填写”匹配值?

错误处理到位,但它从不在代码中抛出此错误,只有“excel已停止工作”,然后崩溃。

我是否需要在宏中使用启用/禁用工作表事件?如果是这样,请提供如何实施和解释其工作原理的建议。我已经通过简单地将它们转换为点击按钮解决了以前的On Change问​​题,但我宁愿学习如何更好地实现On Change没有错误的事件。

谢谢!以下是一些我认为与Excel崩溃相关的示例代码:

Private Sub Option1_Change()

On Error GoTo Option1_Change_Error
'Set cell H4 as value entered in Opt1 (adv. filter criteria)
Sheet6.Range("H4").Value = Me.Option1.Value
'Run macro AdvFilter which sets criteria for dependent drop-down box
AdvFilter
   Me.Option2.Value = ""
'Set row source as output of adv filter
Me.Option2.RowSource = "AdvFilter_Output"
'Set list box content
'If no adv.filter output, then blank listbox
If Sheet2.Range("BZ3").Value = "" Then
    Me.lstOptions.RowSource = ""
Else
    Me.lstOptions.RowSource = "AdvFilter_Output"
End If
Exit Sub

Option1_Change_Error:
MsgBox "An error has occurred.  " _
    & vbCrLf & "" _
    & vbCrLf & "" _
    & "Error " & Err.Number & " (" & Err.Description & ") in procedure Option1_Change_Error of Form frmOptions"
End Sub




Private Sub Option2_Change()

On Error GoTo Option2_Change_Error
If Me.Option1 = "" And Me.Option2 <> "" Then
    MsgBox "Select a the category first to see the corresponding options that exist."
    Exit Sub
    Else
    Me.Option2.RowSource = ""
End If
Exit Sub

Option2_Change_Error:
MsgBox "An error has occurred.  " _
    & vbCrLf & "" _
    & vbCrLf & "" _
    & "Error " & Err.Number & " (" & Err.Description & ") in procedure Option2_Change_Error of Form frmOptions"
End Sub

1 个答案:

答案 0 :(得分:0)

想出来,感谢能够通过Tobriand反弹一些想法并遇到一些可能的问题。 由于Option2中的else条款不合适,问题最终导致两个事件之间的行间冲突。

Private Sub Option2_Change()Rowsource上将第二个组合框的change设置为空白,从而无法输入任何内容。 match entry属性设置为False,但我假设删除了combobox 2的rowsource,导致match entry complete属性在用户输入内容时发现并且没有找到匹配项。 我从Option2事件中删除了else部分,它现在似乎正常工作。