Привет, товарищи,VBA macro crashing Excel
Я запускаю макрос, чтобы удалить целые строки, содержащие определенное значение. Код работает отлично на небольших наборах данных, но на текущем (~ 22 000 записей) он последовательно сбой Excel (2010). Код ниже. Если вы не разделите данные на более мелкие куски и снова запустите макрос, я не уверен, что делать.
Любая помощь приветствуется и вот код:
Sub CleanOcc()
'Row counting
Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long
Dim Lrow2 As Long
With Sheets("Occ_Prep")
'Cleans the occ_prep sheet ready for upload (Column and value can be changed)
Sheets("Occ_Prep").Activate
'Set the first and last row to loop through
Firstrow = .UsedRange.Cells(1).Row
Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
'We loop from Lastrow to Firstrow (bottom to top)
For Lrow2 = Lastrow To Firstrow Step -1
'We check the values in the A column in this example
With .Cells(Lrow2, "K")
If Not IsError(.Value) Then
If .Value = "0" Then .EntireRow.Delete
'This will delete each row with the Value "ron"
'in Column A, case sensitive.
End If
End With
Next Lrow2
End With
End Sub
Excel и действительно большие объемы данных не смешиваются, на самом деле это не значит быть базой данных: \ –
Это очень неправильный способ найти последнюю ячейку. См. [ЭТО] (http://stackoverflow.com/questions/11169445/error-finding-last-used-cell-in-vba). Также см. [ЭТО] (http://social.msdn.microsoft.com/Forums/en-US/exceldev/thread/da7d1600-43bc-4e04-b2cc-8c4871349964) Здесь я использую объект 'delrange' для удаления соответствующих строк. Просто измените его в соответствии с вашими потребностями. –
Другой путь. Используйте Autofilter для фильтрации Col K на '0', а затем удалите соответствующие строки. См. [ЭТО] (http://stackoverflow.com/questions/11631363/how-to-copy-a-line-in-excel-using-a-specific-word-and-pasting-to-another-excel-s) Это показывает, как работать с фильтрованным диапазоном. Просто измените его, чтобы удалить свой диапазон. –