VBA: цикл вокруг VLOOKUP для удаления строки в случае успеха - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь зациклить данные на листе в Excel 365, и при выполнении определенных условий удалите строку, к которой относится условие.Все хорошо, пока я не использую функцию VLookUp рабочей книги как часть конечного условия - мне нужно удалить строку, если какое-либо из условий выполнено или если VLookup выполнен успешно (ошибка в VLookUp будет означать, что строка должна бытьсохранился).В настоящее время у меня есть:

On Error Resume Next
divFile = "C:\....\workbook.xlsx"
Set divWorkbook = Workbooks.Open(divFile)
Set divRange = divWorkbook.Worksheets("Sheet3").Range("B2:B274")

For i = lastRow To firstDataRow Step -1
    If Condition1 Or _
       Condition2 Or _
       WorksheetFunction.VLookup(Cells(i, lcCol).Value, divRange, 1, False) Then
        If Err.Number = 0 Then
            Rows(i).Delete
        End If
   End If
Next i

Вышеприведенное переключается на другую рабочую книгу (divWorkbook) и не выполняет то, что предназначено.Как мне сосредоточиться на текущей книге и листе и применить удаление, если vlookup успешен, а не когда нет?

Спасибо, Бен

1 Ответ

0 голосов
/ 26 ноября 2018

Я бы отбросил On Error Resume Next и вместо этого использовал бы Application.Match, проверяя возвращаемое значение на наличие ошибки.

Кроме того, как отметил @ cybernetic.nomad, будьте более точны в отношении того, какой лист вы 'работает над.

Dim shtData As Worksheet

Set shtData = ActiveSheet ' or whatever

divFile = "C:\....\workbook.xlsx"
Set divWorkbook = Workbooks.Open(divFile)
Set divRange = divWorkbook.Worksheets("Sheet3").Range("B2:B274")

For i = lastRow To firstDataRow Step -1
    If Condition1 Or Condition2 Or _
       Not IsError(Application.Match(shtData.Cells(i, lcCol).Value, divRange, 0)) Then

            shtData.Rows(i).Delete

   End If
Next i
...