微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 VBA 仅在退出 Excel 时才会在 ComboBox 上生成“未找到方法或数据成员”错误?

如何解决为什么 VBA 仅在退出 Excel 时才会在 ComboBox 上生成“未找到方法或数据成员”错误?

我有两个 ComboBoxSheet1.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
          

enter image description here

当 SerialNumber 工作时(当 Excel 打开时)

enter image description here

我唯一能想到的是 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”的方法“工作表”失败...

enter image description here

修正 _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

enter image description here

一个错误 - 无法获取 OLEObject 类的 Object 属性

顶部处于正常运行状态。 底部是我关闭 Excel 文件后,它抛出“无法获取 OLEObject 类的对象属性”的调试错误,运行时错误“1004”

enter image description here

错误发生在这一行:

    MsgBox TypeName(Application.ThisWorkbook.Worksheets(1).OLEObjects("SerialNumber").Object)

解决方法

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

确保在 SerialNumber 上有一个名为 Sheet1 的组合框 ActiveX 控件。

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。