2011-08-16 31 views
0

我正在寫一個寫入excel的應用程序。下面的代碼工作正常(它填充請求的單元格),但生成運行時異常,我無法擺脫。運行時COMException Unhandeled

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

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)之一Nothing在某些時候不應該是這會告訴你爲什麼之前拋出這個錯誤。

像這樣分離代碼的另一個好處是,您現在可以正確處置Excel對象,以便Excel實例可以乾淨地關閉。有關信息,請參閱此Q & A:Excel.Range object not disposing so not Closing the Excel process

+0

謝謝! 我比較沒有任何東西在我的代碼幾乎無處不在,並沒有產生錯誤。這就是爲什麼我被困在這一個。對於For循環來說,你是對的,它是默認的,但我只是想強制它,它不會影響代碼。 我繞過這個,通過向另一個for循環添加內部if語句,並且它完美地工作。 感謝解釋它真的幫助! –

+0

@ l3_08你能展示你用來解決它的代碼嗎?會很有趣。也許把它放在一個答案。 – PandaWood

相關問題