Страницы: 1
RSS
Макрос ломается на большом количестве строк
 
Есть нехитрый макрос. Отлично работает, если в файле 5000 строк.  
При увеличении количество строк до 12000 ломается на простейшей операции вставки (специально проверяла пошагово). Ломается - это значит намертво вешает эксель и вба. перезагрузки и перезапуски эффекта не дают.  
К чему бы это и как это побороть не переписывая макрос полностью?  
 
Range("m2").Select  
Do Until IsEmpty(ActiveCell(0, -3))  
 
If ActiveCell(0, -3) <> "" Then ActiveCell.Formula = "=RC[-11]&RC[-10]&RC[-9]&RC[-8]&RC[-7]&RC[-6]&RC[-4]"
ActiveCell(2, 1).Select  
Loop  
 
 
Range(Cells.End(xlDown).Offset(0, 12), Cells(2, 13)).Copy  
Range("m2").PasteSpecial xlPasteValues  
 
er = ActiveSheet.UsedRange.Rows.Count  
 
 
Range("N2").Select  
Dim w As Integer  
For w = 1 To er - 2  
If ActiveCell(0, -4) <> "" Then ActiveCell.FormulaR1C1 = "=SUMIF(RC[-1]:R[" & er - 2 - w & "]C[-1],RC[-1],RC[-4]:R[" & er - 2 - w & "]C[-4])"
ActiveCell.Offset(1, 0).Select  
Next w  
 
Range(Cells.End(xlDown).Offset(0, 13), Cells(2, 14)).Copy  
Range("N2").PasteSpecial xlPasteValues     ВОТ ТУТ ЛОМАЕТСЯ  
Stop  
ActiveSheet.UsedRange.RemoveDuplicates Columns:=13, Header:=xlNo  
Stop  
Range(Cells.End(xlDown).Offset(0, 13), Cells(2, 14)).Copy  
Range("J2").PasteSpecial xlPasteValues  
 
Columns("M:N").Delete
 
При таких объёмах данных макрос надо переписывать "с нуля"  
 
Все эти Select, Copy и Paste, циклы - аблосютно не нужны.  
 
Можно сократить код, заодно увеличив производительность макроса в десятки-сотни раз.  
 
Но вы не прочитали правила форума (там сказано, что надо прикреплять пример файла - не более 100кБ в архиве) - поэтому вряд ли удастся вам помочь.
 
> Range(Cells.End(xlDown).Offset(0, 13), Cells(2, 14)).Copy  
Range("N2").PasteSpecial xlPasteValues ВОТ ТУТ ЛОМАЕТСЯ  
 
Вы заменяете формулы на значения в этом диапазоне. Попробуйте так:  
 
with Range(Cells.End(xlDown).Offset(0, 13), Cells(2, 14))  
.value=.value  
end with
 
{quote}{login=Казанский}{date=12.01.2011 10:03}{thema=}{post}> Range(Cells.End(xlDown).Offset(0, 13), Cells(2, 14)).Copy  
Range("N2").PasteSpecial xlPasteValues ВОТ ТУТ ЛОМАЕТСЯ  
 
Вы заменяете формулы на значения в этом диапазоне. Попробуйте так:  
 
with Range(Cells.End(xlDown).Offset(0, 13), Cells(2, 14))  
.value=.value  
end with{/post}{/quote}  
Пришел поручик Ржевский...  
Ух ты!  
14514
Я сам - дурнее всякого примера! ...
Страницы: 1
Читают тему
Наверх