Vb.net 运行时COMException未处理

Vb.net 运行时COMException未处理,vb.net,vb.net-2010,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" &

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


有什么帮助吗?

HRESULT的意思是
需要对象
。因此,您试图操作的一个或多个对象似乎不存在,但由于代码是在此时编写的,因此很难确定它是哪一个。然而,一个直接的问题是,您正在将值与
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
,可能需要将其更改为正确的数据类型(取决于您的项目设置)

希望您现在能够无误地运行代码,也应该能够逐步遍历代码,并发现其中一个新对象(
aRange
lRange
interior
)在不应该出现错误的某个点上是
Nothing
,这将向您说明它之前抛出错误的原因


像这样拆分代码的另一个好处是,现在可以正确地处理Excel对象,这样Excel实例就可以干净地关闭。有关信息,请参见此问答:

谢谢!在我的代码中,几乎所有的地方我都将其与无进行比较,并且没有生成错误。这就是为什么我被困在这一个。对于for循环,您是对的,默认情况下是这样的,但我只想强制执行它,它不会影响代码。我通过将内部if语句添加到我以前使用的另一个for循环中来解决这个问题,它工作得非常好。谢谢你的解释,真的很有帮助@l3_08您能否展示您用于解决此问题的代码?那会很有趣。也许可以把它写在一个答案里。