Почему мой цикл For Loop завершается до последнего ряда? - PullRequest
0 голосов
/ 28 марта 2019

У меня довольно простой For loop, который смотрит на 2 столбца - ИМЯ и РАБОТА. Если в ячейке есть имена, разделенные запятыми, запускается функция, которая вставляет каждое имя на одну строку ниже, а затем берет количество новых строк и добавляет его к значению последней строки (минус 1). Затем, если рядом с этим именем нет JOB, используется значение JOB +1 выше.

Проблема, с которой я сталкиваюсь, заключается в том, что, хотя я вижу, что значение LastRow добавляется при прохождении, цикл по-прежнему завершается после достижения исходного значения LastRow в начале цикла.

т.е. если LR = 100 в начале цикла, но из-за CountUnique, LR сейчас = 115, цикл все равно завершается после 100.

Я не могу понять, почему.

 LR = Range("B" & Rows.Count).End(xlUp).Row

' Mirror missing attributes
    For i = 2 To LR
        If InStr(Cells(i, 2).Value, ",") Then
            LR = LR + CountUnique(Cells(i, 2)) - 1
        End If
        If Cells(i, 1).Value = "" Then
            Cells(i, 1).Value = Cells(i - 1, 1).Value
        End If

    Next i

Public Function CountUnique(r As Range) As Integer

  Dim c As Collection
    Set c = New Collection
    ary = Split(r.Text, ",")
    On Error Resume Next
    For Each a In ary
        c.Add a, CStr(a)
        If Err.Number = 0 Then

            If CountUnique >= 1 Then
                r.Offset(CountUnique, 0).EntireRow.Insert
                r.Offset(CountUnique, 0).Value = Trim(a)
            End If

            CountUnique = CountUnique + 1
        Else
            Err.Number = 0
        End If
    Next a

 r.Value = c.Item(1)

End Function

1 Ответ

1 голос
/ 28 марта 2019

В VB границы цикла For оцениваются один раз в начале, а значения кэшируются.

Если вы хотите динамическую верхнюю границу, вам нужно использовать цикл Do.

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