问题描述
我有两个 ComboBox,Sheet1.Line_Items
和 Sheet1.SerialNumber
以及一些与两者交互的代码。整体代码运行良好,但在退出 Excel 时会生成“未找到方法或数据成员”错误。
有没有办法防止该错误发生,甚至有办法抑制该错误,以便用户在关闭 Excel 时不会因错误而感到不便?
我的代码:
Private Sub Line_Items_Change() ' Line_Items is an ActiveX ComboBox
Dim ar As Variant
Dim i As Integer
Dim data As Dictionary
If Sheet1.Line_Items.Value Then
ar = GetSerialNumber(Sheet1.Line_Items.Value)
Else
ar = GetNoChoice
End If
With Sheet1.SerialNumber ` an ActiveX ComboBox - Generates ERROR on this line
.ColumnCount = 2
.ColumnWidths = "0;60"
End With
当 SerialNumber 工作时(当 Excel 打开时)
我唯一能想到的是 SerialNumber
在 Excel 关闭时以某种方式被破坏了?组合框被销毁,但 _Change
方法被调用并且无法再找到组合框?
Line_Items ActiveX ComboBox 是如何填充的
Sheet1.Line_Items.Clear
' Update Line Items
With Sheet1.Line_Items
.ColumnCount = 2
.ColumnWidths = "0;60"
End With
' Populate the Combo Box
For i = 0 To UBound(ar,2)
With Sheet1.Line_Items
.AddItem
.List(i,0) = ar(0,i)
.List(i,1) = ar(1,i)
End With
Next i
' Select first row
Sheet1.Line_Items.Value = ar(0,0)
其他注意事项
我有两个组合框。更新一个更新另一个。例如,我目前在想,当我关闭 Excel 时,SerialNumber
组合框以某种方式被破坏,Line_Items
值发生变化,Line_Items_change
代码被调用,Excel 尝试编译它,直到它找到引用 SerialNumber
框的代码,该框不再存在。并抛出错误
使用 OLEObjects 后的新错误
我改变了我的代码
Sheet1.SerialNumber
到
Dim SerialNumber As ComboBox
Set SerialNumber = Worksheets("Sheet1").OLEObjects(2).Object
运行时错误“1004”:对象“_Global”的方法“工作表”失败...
我更改了代码
Set SerialNumber = Worksheets("Sheet1").OLEObjects(2).Object
到
Set SerialNumber = Application.ThisWorkbook.Worksheets(1).OLEObjects(2).Object
Unable to get the Object property of the OLEObject class
下一个错误 - 无法获取 OLEObject 类的 Object 属性
顶部处于正常运行状态。 底部是我关闭 Excel 文件后,它抛出“无法获取 OLEObject 类的对象属性”的调试错误,运行时错误“1004”
MsgBox TypeName(Application.ThisWorkbook.Worksheets(1).OLEObjects("SerialNumber").Object)
解决方法
SerialNumber
不存在,因此代码无法编译。
确保在 SerialNumber
上有一个名为 Sheet1
的组合框 ActiveX 控件。
编译错误会比“退出 Excel 时”更早出现,例如每当调用 Sheet1
中的任何代码时。
宏不起作用,如果 VBA 无法编译代码,则模块中的任何代码都无法运行。
也许有代码在运行时删除 SerialNumber
组合框,或者控件被意外删除或重命名。但是如果 VBA 不能编译给定模块中的任何代码,它就不能运行。