如何解决为什么 VBA 仅在退出 Excel 时才会在 ComboBox 上生成“未找到方法或数据成员”错误?
我有两个 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 不能编译给定模块中的任何代码,它就不能运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。