Макрос пропускает строки в зависимости от файла вставки - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть большой макрос, который берет информацию о ценах из файла поставщика, форматирует ее, а затем создает файл .txt, который затем можно загрузить в систему. Для этого я предлагаю пользователю несколько раз выбрать, например, столбец, который содержит информацию о номере детали или прейскуранте. Все идет нормально. Когда дело доходит до следующего кода, макрос просто пропускает его:

'delete rows with no price  
p = 0  
For i = 3 To LastRow  
    If p > LastRow Then  
        GoTo Ziel4  
    ElseIf IsEmpty(wsImport.Cells(i, 8)) = True Then  
        Rows(i).Delete  
        i = i - 1  
    End If  

    p = p + 1  
Next i

Однако, если я выполню код с точкой останова прямо перед циклом и выполню его, он будет работать нормально. Когда я выполняю весь сценарий с другим файлом поставщика, он просто пропускает 3/4 сценария и создает пустой файл .txt. Я уже попробовал его с Application.ScreenUpdating = False, чтобы улучшить производительность, но он по-прежнему пропускает строки.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

не уверен относительно точной цели вашего кода, но поскольку вы "подсказываете пользователю несколько раз" и все работает, когда вы "выполняете код с точкой останова прямо перед циклом" , я подозреваю, что вы прыгаете между листами и, следовательно, вы склонны пропускать правильный лист

так изменить:

Rows(i).Delete

до:

wsImport.Rows(i).Delete
0 голосов
/ 30 апреля 2018

Убедитесь, что у «LastRow» есть значение перед циклом, как указано в «DisplayName» выше, и я предполагаю, что вы хотите начать с последней строки, а затем снова двигаться вверх при поиске пустых строк, иначе это не приведет к много смысла, верно? Вопрос в том, для чего используется р? Почему вы увеличиваете его на 1 / итерацию и прерываете цикл, если он становится> LastRow?

Попытка:

For i = LastRow To 3 Step -1  'Start at the end and move up, should save you the "p"

    If IsEmpty(wsImport.Cells(i, 8)) = True Then  
        Rows(i).Delete  
    End If  

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