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. そのため、操作しようとしているオブジェクトの 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 つ ( aRangelRangeおよびinterior) がNothing表示されるべきでない時点にあることを確認できるはずです。なぜ以前にそのエラーがスローされたのか。

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

于 2011-08-17T10:01:13.860 に答える