运行时COMException未处理

时间:2011-08-16 16:59:18

标签: vb.net vb.net-2010

我正在开发一个写入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

任何帮助?

1 个答案:

答案 0 :(得分:1)

HRESULT意味着Object Required。因此,您尝试操作的一个或多个对象似乎不存在,但是由于代码是在此刻编写的,因此很难确定它是什么。然而,一个直接的问题是你要将值与Nothing进行比较,在VB.Net中你应该使用Is Nothing来检查它。此外,您已经将For循环设置为从1到1000,步长为1(您不需要包含它,因为它是默认值)但是您正在执行{{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 ,可能需要将其更改为正确的数据类型(具体取决于您的项目设置)。

希望您现在应该能够无错误地运行代码,并且您还应该能够逐步执行代码并找到其中一个新对象(ObjectaRange和{{ 1}})在某个时刻是lRange,它不应该显示为什么它之前会抛出该错误。

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