VBA EXCEL - Rows.Delete (линия) - ошибка 13 не встречаются типы

Я работаю какие-то макросы в Excel, где я должен удалять некие линии, если у них есть стоимость"", однако у каких-то линий есть стоимость #: СТОИМОСТЬ!. Вышеупомянутые также должны быть удаленными.

У меня есть следующее условие, но меня бросает ошибка "не совпадают типы".

If (IsError(Range("b" & fila).Value) Or Range("b" & fila).Value = "") then

    Rows(fila).Delete
end if

Кто-то может показывать меня, как я могу обусловливать, если стоимость ячейки имеет #: Стоимость! чтобы мочь удалять линию.

Благодаря всем сотрудникам.

PD: линия получает положение, в котором я начинаю проверять таблицу.

0
задан 15.05.2019, 16:02
1 ответ

Часто использовать ее gestiГіn ошибок - очень хороший opciГіn. В этом случае мы будем использовать Он Эррор GoTo и Он Эррор Resume Next . Этот Гєltimo - mГЎs коротко и прямо.

, Когда lГ-nea if задает вопросы condiciГіn, производит ошибку и эта ошибка оказывается справедливой во второй condiciГіn:

Range("b" & fila) = ""

, Если информация - nГєmero, один alfanumГ©rico, дата, и т.д. if функционирует верно, но если ячейка содержит один #ВЎVALOR! , один #ВЎDIV/0! , и т.д. devolverГЎ ошибка и программа detendrГЎ.

Благодаря Он Эррор GoTo мы можем управлять об этой "interrupciГіn". Я говорю "interrupciГіn", потому что мы можем говорить, что она funciГіn он задерживается, чтобы решать проблему и потом возвращается сначала. Верно, что он не остается с той же точки, в которой generГі ошибка, но это не имеет значение, в этом случае. Она funciГіn terminarГЎ удаляя все пустые ячейки и с ошибками.

Три примера дают тот же результат, показанный в нижнем изображении.

Sub s_BorraRow1()

Dim fila, v_Range As Single
On Error GoTo sigue

    'v_Range = Range("B2").End(xlDown).Row 'Hasta la primera celda en blanco
    v_Range = Cells(Rows.Count, 2).End(xlUp).Row 'Hasta la última delda escrita

    Application.ScreenUpdating = False
    For fila = v_Range To 2 Step -1
        If IsError(Range("b" & fila)) _
            Or Range("b" & fila) = "" _
            Or Range("b" & fila) = "#¡VALOR!" _
            Then Rows(fila).Delete
    Next fila
    Application.ScreenUpdating = True
    MsgBox "Fin..."
    Exit Sub

sigue:
    Rows(fila).Delete
    s_BorraRow1
End Sub

On ошибку Обобщает Next , особенно в этом случае, это лучшая opciГіn. Только он делает одну прошлой и она interrupciГіn из-за ошибки она практически недействительная во времени ejecuciГіn.

'VBA Excel
Sub s_BorraRow2()

Dim fila, v_Range As Single
On Error Resume Next

    'v_Range = Range("B2").End(xlDown).Row 'Hasta la primera celda en blanco
    v_Range = Cells(Rows.Count, 2).End(xlUp).Row 'Hasta la última delda escrita

    Application.ScreenUpdating = False
    For fila = v_Range To 2 Step -1
        If IsError(Range("b" & fila)) _
            Or Range("b" & fila) = "" _
            Or Range("b" & fila) = "#¡VALOR!" _
            Then Rows(fila).Delete
    Next fila
    Application.ScreenUpdating = True
    MsgBox "Fin..."
End Sub

Есть третий mГ©todo используя До Виле вместе с Фор Эач . Переменная делает одну funciГіn очень важно и не может обходиться без нее. Ввиду mГ©todo использованный не очень желательно использовать это, если nГєmero ячеек он поднят, так как время процесса растет показательно с этими.

'VBA Excel
Sub s_BorraRow3()

Dim A As Boolean
Dim v_Range As Range
On Error Resume Next

    'Set v_Range = Range("B2", "B" & Range("B2").End(xlDown).Row) 'Hasta la primera celda en blanco
    Set v_Range = Range("B2", "B" & Cells(Rows.Count, 2).End(xlUp).Row) 'Hasta la última delda escrita
    A = True

    Application.ScreenUpdating = False
    Do While A
        A = False
        For Each obj_select In v_Range
            If IsError(obj_select) _
                Or obj_select = "" _
                Or obj_select = "#¡VALOR!" _
                Then A = Rows(obj_select.Row).Delete
        Next
    Loop
    Application.ScreenUpdating = True
    MsgBox "Fin..."
End Sub

, Если бы quisiГ©ramos (поскольку в примерах) удалять также ошибки, написанные в способе тексте было, что aГ±adir один в один эти ошибки в форме:

If IsErr...  Or Range("b" & fila) = "#¡VALOR!" Then

Изображение показывает ячейку способ текст, которая не была удалена, потому что cГіdigo не incluГ - в эту condiciГіn.

introducir la descripción de la imagen aquí

1
ответ дан 02.12.2019, 06:02

Теги

Похожие вопросы