【问题标题】:Run-time error '-2147418113 (8000ffff)': Automation Error运行时错误“-2147418113 (8000ffff)”:自动化错误
【发布时间】:2014-07-31 23:11:33
【问题描述】:

我的代码运行完美,直到到达“If c =”“Then”。此时出现运行时错误'-2147418113 (8000ffff)': Automation Error。我已经放置了一个 On Error Resume Next 语句来检查如果我跳过这一行是否一切正常并且确实如此。我真的不明白这个错误是什么意思,也找不到有用的信息。有人可以解决这个问题吗?我试图将 "If c = "" Then" 更改为 "If len(c.value)=0 Then" 但它会引发相同的错误。 AddresRawDataFile 中的所有变量都被定义为公共(作为范围),并且它们在不同的模块中设置为范围,称为 PublicVariable,每个过程都会调用该模块。

Private Sub CommandButton3_Ok_Click()

    Dim MsgAlert As String
    Dim MsgBoxAlert As Variant 'Message box for for many checks done below
    Dim c As Variant 'Variable used in a for each structure
    Dim AddressRawDataFile As Variant 'Array of variables with address in Box2_UPb_Options

    'Code to assign values from Box2_UPb_Options to the related variables

    AddressRawDataFile = Array(RawHg202Range, RawPb204Range, RawPb206Range, RawPb207Range, RawPb208Range, RawTh232Range, RawU238Range, _
    RawHg202Header, RawPb204HeaderRange, RawPb206HeaderRange, RawPb207HeaderRange, RawPb208HeaderRange, RawTh232HeaderRange, _
    RawU238HeaderRange)


    'All of the above variables must not be = ""
    For Each c In AddressRawDataFile
        'On Error Resume Next
        If c = "" Then
            MsgBoxAlert = MsgBox("There are one or more addresses missing in Start-AND-Options sheet. " & _
            "Please, check it.", vbOKOnly, "Missing Address")
                Load Box2_UPb_Options
                    Box2_UPb_Options.MultiPage1.Value = 2
                        Box2_UPb_Options.Show
        End If
    Next

【问题讨论】:

  • 我已经运行了您的代码 (Excel 2010),但该行没有出现错误。也许我遗漏了一些东西......如果你在该行放置一个断点并在手表中检查c,它包含什么?
  • 我也在使用 Excel 2010。看,我不确定我是否理解了你的问题,但让我试着回答一下。变量 c 实际上并不是什么特别的东西,我刚刚创建了它以在“For Each”结构中使用。我用它来检查由 AddressRawDataFile 数组中的变量表示的任何单元格是否为空。我回答你的问题了吗?
  • 不是真的...您需要使用调试器单步执行代码,并在代码中出现错误的行之前找出 c 的值。
  • 好的,现在我明白了。给我一点时间!
  • 好的,所以由于c 似乎没有任何内容,那么我怀疑您在数组中填充值/范围的方式在某种程度上失败了。您可能需要创建一个mcve 以便人们能够独立地重现问题。目前,只有您知道该数组是如何填充的。

标签: excel vba


【解决方案1】:

由于名为RawHg202Range等的项目实际上是Range对象,那么您应该使用Is Nothing来检查它们是否为空:

AddressRawDataFile = Array(RawHg202Range, RawPb204Range, RawPb206Range, RawPb207Range, RawPb208Range, RawTh232Range, RawU238Range, _
    RawHg202Header, RawPb204HeaderRange, RawPb206HeaderRange, RawPb207HeaderRange, RawPb208HeaderRange, RawTh232HeaderRange, _
    RawU238HeaderRange)

    For Each c In AddressRawDataFile
        If c Is Nothing Then

【讨论】:

  • 但是,在我得到这个错误之前,我的代码正在做我想要的。你能解释一下为什么我应该使用“Is Nothing”吗?有什么好处?我正在使用您的建议测试我的代码。
  • = "" 是仅适用于字符串的比较。同样,您会期望= 0 仅适用于数字。对于对象类型,您要么有对象,要么没有对象,在没有对象引用的情况下,VBA 使用特殊值Nothing 来显示这一点。这个值不能用= 测试,而是用Is 测试。因此,c Is Nothing 的意思是:如果这个特定的c 没有与任何对象相关联
  • barrowc,您的建议无法正常工作。即使该范围指示的单元格是空的,我的 if 结构也无法使用“如果 c 什么都没有”来指示这一点。
  • 我明白,但我没有测试我的变量是否设置为某个对象,我想看看这些范围指示的单元格是否不为空。有些信息必须写在那里。
  • 显示一些填充变量的代码,以便我们尝试了解它们实际指向的内容。此外,名为RawHg202Header 的变量的命名与其他变量不同(所有其他变量都以HeaderRange 结尾,而不仅仅是Header)——但这不一定是个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 2014-01-14
  • 2013-10-23
  • 1970-01-01
相关资源
最近更新 更多