我有两个 ComboBoxesSheet1.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 关闭时以某种方式被破坏?ComboBoxes 被破坏,但该_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”的方法“工作表”失败...
修复错误后的新_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)