Как исправить цикл инициализации только иногда в Excel VBA? - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть макрос Excel VBA, который передает некоторые данные из одной рабочей книги в другую.Рабочая книга, в которую отправляются данные, состоит из 12 таблиц, каждая из которых представляет месяц.Когда пользователь запускает макрос, он определяет, в какой лист вставить данные из некоторых передаваемых данных.Я поднимаю это, потому что проблема, с которой я сталкиваюсь, зависит от листа, на который будут вставлены данные.Часть макроса - это цикл do while, который находит следующую доступную строку для вставки данных.Этот цикл активируется только на определенных листах.Цикл пропускается на других листах.(Например, цикл будет активирован, если данные будут вставлены в декабрьский лист, но не в ноябрьский или январский.)

Я прошел макрос дважды.В первый раз я установил данные для вставки в декабрьский лист, и цикл работал правильно.

Во второй раз я установил данные для вставки в январский лист, и цикл был пропущен.

With wbOut.Sheets(strSheet)
        .Activate
        nLastRowOut = .Range("A500").End(xlUp).Row + 1
        i = 220
        nLastRowOut = i
        Do While (i > 41)
              str = .Range("A" & i).Value & .Range("B" & i).Value & .Range("C" & i).Value & .Range("D" & i).Value & .Range("E" & i).Value & .Range("F" & i).Value & .Range("G" & i).Value & .Range("H" & i).Value & .Range("I" & i).Value & .Range("J" & i).Value & .Range("K" & i).Value & .Range("L" & i).Value & .Range("M" & i).Value
              If Replace(str, 0, "") <> "" Then
                    nLastRowOut = i + 1
                    GoTo copySections
              End If
              i = i - 1
        Loop

Следующая доступная строка должна быть найдена и затем использована для вставки данных.

То, что на самом деле происходит в 75% случаев, заключается в том, что цикл пропускается и данные вставляются в строку 221 вместо следующей доступной строки.

1 Ответ

0 голосов
/ 27 декабря 2018

Код для nLastRowOut выглядит неправильно ..

Измените это:

nLastRowOut = .Range("A500").End(xlUp).Row + 1

на это:

nLastRowOut = .Range("A" & Rows.Count).End(xlUp).Row + 1

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