0

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

有什么帮助吗?

4

1 回答 1

2

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可能需要更改为正确的数据类型(取决于您的项目设置)。

希望您现在应该能够无错误地运行代码,并且您还应该能够单步执行代码并发现新对象之一(aRangelRangeinteriorNothing某个不应该出现的点上,这将向您显示为什么它之前抛出了那个错误。

像这样拆分代码的另一个优点是您现在可以正确处理 Excel 对象,以便 Excel 实例可以干净地关闭。有关信息,请参阅此问答:Excel.Range 对象未处理,因此未关闭 Excel 进程

于 2011-08-17T10:01:13.860 回答