その HRESULT はObject Required
. そのため、操作しようとしているオブジェクトの 1 つ以上が存在しないように見えますが、現時点ではコードが作成されているため、それがどれであるかを確認することは困難です。ただし、差し迫った懸念は、値を と比較していることですNothing
。VB.Net では、それIs Nothing
を確認するために使用することになっています。また、ステップ 1 で 1 から 1000 までループするように既に設定していFor
ます (これはデフォルトなので含める必要はありません) 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
正しいデータ型に変更する必要がある可能性がある新しいオブジェクトを宣言しました(プロジェクトの設定によって異なります)。
うまくいけば、エラーなしでコードを実行できるはずです。また、コードをステップ実行して、新しいオブジェクトの 1 つ ( aRange
、lRange
およびinterior
) がNothing
表示されるべきでない時点にあることを確認できるはずです。なぜ以前にそのエラーがスローされたのか。
このようにコードを分割するもう 1 つの利点は、Excel インスタンスを正常にシャットダウンできるように、Excel オブジェクトを適切に破棄できることです。情報については、この Q&A を参照してください: Excel.Range object not disposing so not Closing the Excel process