0

我有两个 ComboBoxesSheet1.Line_ItemsSheet1.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)
4

1 回答 1

1

SerialNumber不存在,因此代码无法编译。

确保有一个名为的组合框 ActiveXSerialNumber控件Sheet1

编译错误会比“退出 Excel 时”更早地出现,例如每当Sheet1调用任何代码时。

宏不起作用,如果 VBA 无法编译代码,则模块中的代码无法运行。

也许有代码在运行时删除SerialNumber组合框,或者控件被意外删除或重命名。但是,如果 VBA 无法编译,则给定模块中的任何代码都无法运行。

于 2021-03-29T15:38:43.217 回答