その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
などの新しいオブジェクトを宣言した:だからを固定し、それが働いていないものにあなたをより良いアイデアを与える可能性があることの部品にそれを分割
正しいデータ型(プロジェクトの設定に応じて)。
うまくいけば、あなたは今、エラーなしでコードを実行することができます、あなたはまた、コードをステップとするときに新しいオブジェクト(aRange
、lRange
とinterior
)の一つは、いくつかの点でNothing
であることを見つけることができるはずですそれがなぜ以前にそのエラーを投げたのかをあなたに示すことはできません。
このようにコードを分割するもう1つの利点は、Excelインスタンスをきれいにシャットダウンできるように、Excelオブジェクトを適切に処分できることです。このQ & Aの情報を参照してください。Excel.Range object not disposing so not Closing the Excel process
ありがとう! 私はコード内のどこにも何も書かず、エラーも発生していません。それで私はこの1つにこだわったのです。 Forループについては、デフォルトでは正しいですが、強制したいだけで、コードには何の影響もありません。 私は前に持っていたループのために内側のif文を追加することでこの問題を回避しました。 本当に助けてくれてありがとう! –
@ l3_08あなたはそれを回避するために使用したコードを表示できますか?面白いだろうか。多分それを答えに入れてください。 – PandaWood