2016-06-24 4 views
0

Я сделал следующее для цикла, чтобы спуститься по каждой ячейке, пока не достигнет ячейки, которая находится на уровне с последней используемой ячейкой в ​​другом столбце. Однако он выходит далеко за пределы последней использованной ячейки. Он работает нормально, но требуется намного больше времени для запуска, особенно если у него есть 30 000 строк! У кого-нибудь есть идеи по этому поводу?Для Loop выходит за пределы параметра VBA

Dim i As Long 
lMaxRows = Cells(Rows.Count, "K").End(xlUp).Row 
For i = 1 To lMaxRows 
    Range("D" & lMaxRows + 1).Select 
    ActiveCell.FormulaR1C1 = "0:00:00" 
    lMaxRows = Cells(Rows.Count, "E").End(xlUp).Row 
    Range("E" & lMaxRows + 1).Select 
    ActiveCell.FormulaR1C1 = "1" 
Next i 
+0

У вас, вероятно, есть данные ниже, чем вы ожидаете. Кроме того, вы должны прочитать [this] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) о том, как избежать выбора. – Kyle

+0

Рассмотрите, что вы делаете, вы сбросите 'lMaxRows' в цикле, а затем вы устанавливаете значение в' E & lMaxRows + 1', поэтому вы никогда не достигнете конца цикла. ... –

+0

Вы перекомпилируете 'lMaxRows' на каждом проходе через цикл. –

ответ

5

Определите родительский лист, избегайте выбора и заполнения всех ячеек за один раз.

With Worksheets("Sheet1") 
    With .Range(.Cells(1, "K"), .Cells(.Rows.Count, "K").End(xlUp)) 
     .Offset(0, -7) = "0:00:00" 
     .Offset(0, -6) = 1 
    End With 
End With 
+1

@ScottCraner - Я думаю, что джип, мысленно проверенный сегодня утром ... – BruceWayne

+1

@BruceWayne был там. –

+1

Спасибо, что поймали это @ScottCraner. Слишком много вещей на моей не-SO-пластинке, казалось бы, подпрыгивают здесь и решают проблемы. Отредактировано для исправления выше. – Jeeped

0

Я думаю, что это связано с использованием lMaxRows и циклом.

Это работает?

Sub t2() 
Dim lMaxRows&, xMaxRows& 
Dim i  As Long 
lMaxRows = Cells(Rows.Count, "K").End(xlUp).Row 
i = 1 
Do While i <= lMaxRows 
    Range("D" & lMaxRows + 1).FormulaR1C1 = "0:00:00" 
    xMaxRows = Cells(Rows.Count, "E").End(xlUp).Row 
    Range("E" & xMaxRows + 1).FormulaR1C1 = "1" 
    i = i + 1 
Loop 
End Sub 

Без выборочных данных трудно понять, что вы хотите сделать/ожидаете вывода.

Смежные вопросы