2014-01-22 2 views
0

Код ниже приводит к тому, что мой код боится около 15 секунд во время его работы. У кого-нибудь есть предложения, которые ускорят это?Удаление строк, заглушающих код vba

Спасибо,

Range("Test_Range").Offset(1, 1).Activate 
Do Until ActiveCell.Offset(0, -1) = "" 
    If ActiveCell.Value <= 0.01 Then 
     Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 8)).Delete Shift:=xlUp 
     ActiveCell.Offset(-1, 0).Activate 
    Else 
    End If 
    ActiveCell.Offset(1, 0).Activate 
Loop 
+0

1) старайтесь избегать использования инструкции 'Activate' (прочитайте [this] (http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select), пожалуйста). 2) попробуйте добавить 'Application.ScreenUpdating = False' в самом начале вашего кода и' Application.ScreenUpdating = True' после вашего кода. Попробуйте использовать оператор 'With' и использовать вместо него объект« Range »вместо« ActiveCell » –

ответ

2

Я хотел бы сделать это следующим образом:

'***This code is to be inserted within the coding module 
'of the sheet to be modified 

Dim calcDefaultState As XlCalculation 
'To retain the current XlCalculation property 
calcDefaultState = Application.Calculation 

'to speed up the process 
Application.Calculation = xlCalculationManual 
Application.ScreenUpdating = False 

Dim lastRow As Long 
'To find the last non empty row of "Test_Range" column 
lastRow = Me.Cells(Me.Rows.Count, Range("Test_Range").Column).End(xlUp).Row 

Dim i As Long: i = 1 
Do Until i = (lastRow - Range("Test_Range").Row) + 1 
    With Range("Test_Range").Offset(i, 1) 
     If .Value <= .01 Then 
      Me.Range(Cells(.Row, 1), Cells(.Row, 8)).Delete Shift:=xlUp 
      lastRow = lastRow - 1 
     Else 
      i = i + 1 
     End If 
    End With 
Loop 

'To put back the original XlCalculation property 
Application.Calculation = calcDefaultState 
Application.ScreenUpdating = True 

Обратите внимание, что если есть небольшая вероятность того, что последняя строка файла Excel может быть непустым, вы должны добавить проверку, чтобы проверить, потому что в в этом случае lastRow не будет точным.

+0

Hi simpLE MAn, я получаю недопустимое использование ключевого слова Me? Я никогда не сталкивался с этой ошибкой раньше. – Clouse24

+0

@ Clouse24, вы поместили код в модуль кода листа или в модуль? –

0

Код отлично и быстро работает на моем компьютере. Предполагая, что проблема не связана с вашим компьютером (т. Е. Полный/объем памяти на жестком диске), может ли это быть удаляемый диапазон, фактически включает в себя расчет других электронных таблиц?

+0

Спасибо Alex, это часть очень большого блока кода. По сути, я собрал некоторые значения из большого массива и выбросил их в диапазон. Я бы хотел получить результаты, которые составляют менее 1%. У меня нет никаких вычислений в электронной таблице вообще, поскольку они все выполнены в VBA. Обычно я просто использую специальный тип ячейки и удаляю строку, но в этой таблице есть другая таблица в другой таблице. – Clouse24

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