2011-08-16 13 views
0

私はExcelに書き込むアプリケーションに取り組んでいます。次の部分のコードは正常に動作しています(要求されたセルを埋める)が、取り除けない実行時例外を生成します。実行時COMException未処理

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を意味します。だから、あなたが操作しようとしているオブジェクトの1つ以上が存在しないようですが、コードが現時点で書かれているように、それがどれであるかを確かめるのは難しいです。あなたが値を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 

Iに変更する必要がありますObjectなどの新しいオブジェクトを宣言した:だからを固定し、それが働いていないものにあなたをより良いアイデアを与える可能性があることの部品にそれを分割

正しいデータ型(プロジェクトの設定に応じて)。

うまくいけば、あなたは今、エラーなしでコードを実行することができます、あなたはまた、コードをステップとするときに新しいオブジェクト(aRangelRangeinterior)の一つは、いくつかの点でNothingであることを見つけることができるはずですそれがなぜ以前にそのエラーを投げたのかをあなたに示すことはできません。

このようにコードを分割するもう1つの利点は、Excelインスタンスをきれいにシャットダウンできるように、Excelオブジェクトを適切に処分できることです。このQ & Aの情報を参照してください。Excel.Range object not disposing so not Closing the Excel process

+0

ありがとう! 私はコード内のどこにも何も書かず、エラーも発生していません。それで私はこの1つにこだわったのです。 Forループについては、デフォルトでは正しいですが、強制したいだけで、コードには何の影響もありません。 私は前に持っていたループのために内側のif文を追加することでこの問題を回避しました。 本当に助けてくれてありがとう! –

+0

@ l3_08あなたはそれを回避するために使用したコードを表示できますか?面白いだろうか。多分それを答えに入れてください。 – PandaWood

関連する問題