2016-07-21 3 views
0

Возможно, кто-то поможет мне исправить мой код, чтобы устранить ошибку переполнения, которую я получаю, когда есть только одна ячейка, которая соответствует критериям выбора в моем коде ниже? Ячейка A4 и внизу содержит описание продукта, а ячейка B4 и внизу содержат количество. Цель состоит в том, чтобы скопировать описание из A4 в столбец L столько раз, сколько соответствует количеству в B4, и повторять этот процесс столько раз, сколько описаний продуктов в столбце A. Это отлично работает, когда имеется более одного описания для копировать, но приводит к ошибке переполнения, если A5 вниз пустые. Три макроса, вызываемые в приведенном ниже коде, - я считаю - все безобидны и должны делать только защиту от этого листа до того, как реальный код начнет работать, а затем отформатировать диапазон и повторно защитить рабочий лист после его завершения. Я довольно приличный с формулами Excel, но моя кодировка слаба, поэтому я надеюсь, что ответ является простым недостатком в моем коде. Спасибо заранее.Что вызывает ошибку времени выполнения Excel 6?

Private Sub Create_NumberList() 

    Application.ScreenUpdating = False 
    Sheets("Selections").Select 
    Call UnprotectSelections 
    Dim lRow As Long 
    Dim x, MyCount As Integer 

    lRow = Range("A4:B4").End(xlDown).Row 

    For Each cell In Range("A4:A" & lRow) 
     cell.Copy 
     MyCount = cell.Offset(0, 8) 

     Do 
      x = x + 1 
      Range("L" & x).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
                       :=False, Transpose:=False 
      MyCount = MyCount - 1 
     Loop Until MyCount = 0 
    Next cell 

    Application.CutCopyMode = False 
    Call ProtectSelections 
    Call ReformatSelections 
End Sub 

ответ

0

Изменение: lRow = Range("A4:B4").End(xlDown).Row

To: lRow = Range("A" & Rows.Count).End(xlup).Row

Причина в том, что если A5:B5 и вниз все пусто, lRow становится самой нижней в таблице с функцией xlDown и переменные не может хранить память для номеров строк (и код также не нужен).

Итак, если код начинается внизу и смотрит вверх (с xlUp), он также найдет последнюю строку данных для проверки.

+1

Скотт, который работает не только отлично, но заметно ускорил процесс VBA! Я также хотел бы упомянуть, что это второй раз, когда вы предоставили мне отличное решение, и я не могу вас поблагодарить. –

+0

@ user1483720 - это было как 4 года назад! Удивительно! Кроме того, на SO лучше всего принимать ответы, которые работают на вас, или вы считаете полезным, чтобы другие могли принести пользу в будущем. –

+0

Извините, я пропустил это. Это не очень интуитивно, если вы не обычный пользователь. –