Я работаю какие-то макросы в Excel, где я должен удалять некие линии, если у них есть стоимость"", однако у каких-то линий есть стоимость #: СТОИМОСТЬ!. Вышеупомянутые также должны быть удаленными.
У меня есть следующее условие, но меня бросает ошибка "не совпадают типы".
If (IsError(Range("b" & fila).Value) Or Range("b" & fila).Value = "") then
Rows(fila).Delete
end if
Кто-то может показывать меня, как я могу обусловливать, если стоимость ячейки имеет #: Стоимость! чтобы мочь удалять линию.
Благодаря всем сотрудникам.
PD: линия получает положение, в котором я начинаю проверять таблицу.
Часто использовать ее 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.