Время выполнения 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 который может потребоваться изменить на правильные типы данных (в зависимости от настроек вашего проекта).

Надеюсь, теперь вы сможете выполнить код без ошибок, а также сможете пройтись по коду и найти один из новых объектов (aRange, lRange а также interior) является Nothing в какой-то момент, когда это не должно быть, что покажет вам, почему он вывел эту ошибку раньше.

Другое преимущество разделения кода таким образом, что теперь вы сможете правильно распоряжаться объектами Excel, чтобы экземпляр Excel мог корректно завершить работу. См. Этот вопрос и ответ для информации: объект Excel.Range не удаляется, поэтому не закрывается процесс Excel

Другие вопросы по тегам