Функция поиска VBA пропускает следующий ряд - PullRequest
0 голосов
/ 12 октября 2018

Я застрял с довольно странной ошибкой (?), Используя функцию Find.По какой-то причине он не может найти следующую строку (n + 1), хотя он находит любую другую строку в определенном диапазоне.

Sub band()
Dim laik As String
Dim row1 As Integer
Dim DbSh As Worksheet
Set DbSh = ThisWorkbook.Sheets("Sheet1")
eil = 9 'row in sheet
On Error Resume Next
Do While DbSh.Cells(eil, 1).Value <> ""
  laik = DbSh.Cells(eil, 3).Value
  row1 = DbSh.Range("C" & eil + 1 & ":C1000").Find(laik, LookIn:=xlValues, LookAt:=xlWhole).row
  If Err.Number <> 0 Then Err.Number = 0: GoTo next1
  If DbSh.Cells(eil, 4).Value = DbSh.Cells(row1, 4).Value And DbSh.Cells(eil, 6).Value = DbSh.Cells(row1, 6).Value And DbSh.Cells(eil, 8).Value = DbSh.Cells(row1, 8).Value Then
    DbSh.Cells(eil, 5).Value = DbSh.Cells(eil, 5).Value & ", " & DbSh.Cells(row1, 5).Value
    DbSh.Range(row1 & ":" & row1).EntireRow.Delete
    eil = eil - 1 'subtract, still looking for more same values
  End If
next1:
  eil = eil + 1
  Loop
End Sub

По сути, он ищет те же значения ячеек (eil, 3) и, если он соответствует некоторым критериям в столбцах D, F и H, найденная строка добавляется в строку «eil» (столбец E)а затем он удаляется.Если одинаковые значения в столбце C находятся рядом друг с другом (eil и eil + 1),

row1 = DbSh.Range("C" & eil + 1 & ":C1000").Find(laik, LookIn:=xlValues, LookAt:=xlWhole).row

находит вторую доступную строку (из eil + 2, eil + 3 и т. Д.), Пропуская eil +1 рядЕсли я удаляю +1 из Range («C» & eil + 1 & «: C1000»), оставляя только Range («C» & eil & «: C1000»), он находит ту же строку.Пока у меня есть обходной путь, но было бы здорово узнать, почему «Find» пропускает следующую строку.

1 Ответ

0 голосов
/ 12 октября 2018

eil = eil + 1 всегда добавляет 1 к eil.DbSh.Range ("C" & eil + 1 & ": C1000"). Find также добавляет 1. Собрав все вместе, вы пропускаете «следующую» строку всякий раз, когда находите что-либо.

Это должно исправитьпроблема.

...
row1 = DbSh.Range("C" & eil & ":C1000").Find(laik, LookIn:=xlValues, LookAt:=xlWhole).row
...

Кстати, я рекомендую пропустить все эти «контролируемые ошибки» и использовать пару Find / FindNext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...