vba обработка ошибок при отсутствии обязательного столбца - PullRequest
0 голосов
/ 25 июня 2018

Мне нужно написать универсальный макрос, чтобы считать условно столбцы в разных таблицах.

Проблема в том, что каждая таблица может содержать различное количество столбцов.

Поэтому, если требуемые столбцы не существуют, появляется ошибка.

В этом случае я хотел бы применить обработчик ошибок, который будет писать в столбце «null».

Я пытаюсь код ниже, он работает, ошибка не появляется, и макрос продолжаетсядля запуска, но ячейки в столбцах остаются пустыми, без «ноль» В чем проблема?Может быть, есть более оптимальный способ управлять этим?

Function Section800_error()
    Dim zelle As Range
    Dim i As Integer
    Dim posMonitoring As Integer
    Dim j As Integer
    Dim intLastRow As Integer
    On Error GoTo Handler
    With Sheets("ICS Table")
       Set zelle = .Cells.Find("800_Section", lookat:=xlPart)
       posMonitoring = zelle.Column
       intLastRow = .UsedRange.Rows.Count
       For i = 2 To intLastRow
          If .Cells(i, posMonitoring).Value < 1 Or .Cells(i, posMonitoring).Value > 10 Then
               Sheets("Section_errors").Cells(i, 8) = "err700"
          Else
               Sheets("Section_errors").Cells(i, 8) = "no"             
          End If
       Next i
    End With
Exit Function

Handler:

    For i = 2 To intLastRow  
        Sheets("Section_errors").Cells(i, 8).Value = "null"
    Next i           
End Function

1 Ответ

0 голосов
/ 25 июня 2018

возможная коррекция

Function Section800_error()
    Dim zelle As Range
    Dim i As long
    Dim posMonitoring As Integer
    Dim intLastRow As Integer
    With Sheets("ICS Table")
        Set zelle = .Cells.Find("800_Section", lookat:=xlPart)
        If zelle Is Nothing Then
            For i = 2 To intLastRow
                Sheets("Section_errors").Cells(i, 8).Value = "null"
            Next i
        Else
            posMonitoring = zelle.Column
            intLastRow = .UsedRange.Rows.Count
            For i = 2 To intLastRow
                If .Cells(i, posMonitoring).Value < 1 Or .Cells(i, posMonitoring).Value > 10 Then
                    Sheets("Section_errors").Cells(i, 8) = "err700"
                Else
                    Sheets("Section_errors").Cells(i, 8) = "no"
                End If
            Next i
        End If
    End With
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...