【问题标题】:Runtime COMException Unhandeled运行时 COMException 未处理
【发布时间】:2011-08-16 16:59:18
【问题描述】:

我正在开发一个写入 excel 的应用程序。以下 f 代码工作正常(它填充了请求的单元格)但生成了一个我无法摆脱的运行时异常。

    For i = 1 To 1000 Step 1
        If Not (cPart.Range("A" & i).Value = Nothing) Then
            If (cPart.Range("L" & i).Value = Nothing) Then
               cPart.Range("L" & i).Interior.ColorIndex = 3  
            End If
            i = i + 1
        End If
    Next

异常是:COMException 未处理:HRESULT 异常:0x800A01A8

有什么帮助吗?

【问题讨论】:

    标签: vb.net vb.net-2010


    【解决方案1】:

    HRESULT 表示Object Required。因此,您尝试操作的一个或多个对象似乎不存在,但由于目前编写的代码,很难确定它是哪个。不过,当务之急是您将值与Nothing 进行比较,在VB.Net 中您应该使用Is Nothing 进行检查。此外,您已经将For 循环设置为从 1 到 1000,步长为 1(您不需要包括,因为它是默认值)但是您正在执行 i = i + 1 看起来像个错误?

    因此,修复它并将其拆分为各个部分,它可能会让您更好地了解什么不起作用:

    For i = 1 To 1000
        Dim aRange As Object = cPart.Range("A" & i)
        If aRange IsNot Nothing AndAlso aRange.Value IsNot Nothing Then
            Dim lRange As Object = cPart.Range("L" & i)
            If lRange IsNot Nothing AndAlso lRange.Value Is Nothing Then
                Dim interior As Object = lRange.Interior
                If interior IsNot Nothing Then
                    interior.ColorIndex = 3  
                End If
            End If      
      End If
    Next
    

    我已将新对象声明为 Object,可能需要将其更改为正确的数据类型(取决于您的项目设置)。

    希望您现在应该能够无错误地运行代码,并且您还应该能够单步执行代码并发现新对象之一(aRangelRangeinterior)是 @ 987654332@ 在某个不应该出现的时候,它会告诉你为什么它之前抛出了这个错误。

    像这样拆分代码的另一个好处是,您现在可以正确处理 Excel 对象,以便 Excel 实例可以干净地关闭。有关信息,请参阅此问答:Excel.Range object not disposing so not Closing the Excel process

    【讨论】:

    • 谢谢!我在我的代码中几乎所有地方都没有比较,并且没有产生错误。这就是为什么我被困在这个。对于 For 循环,你是对的,默认情况下它是正确的,但我只想强制它并且它不会影响代码。我通过将内部 if 语句添加到我之前拥有的另一个 for 循环来解决这个问题,它运行良好。感谢您的解释,它真的很有帮助!
    • @l3_08 你能展示你用来解决它的代码吗?会很有趣。也许把它放在一个答案中。
    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    相关资源
    最近更新 更多