Страница 1 из 2
Можно ли упростить
Добавлено: 25 июл 2008, 10:34
СашаСВ
Доброе утро уважаемые!
Есть вот такой код.
Dim iCell As Range, iCellHidden As Range
For Each iCell In Range("AT8:AT1454")
If iCell.Value = "0" Or iCell.Text = "" Then
Set iCellHidden = Union(iCell, _
IIf(iCellHidden Is Nothing, iCell, iCellHidden))
End If
Next
If Not iCellHidden Is Nothing Then iCellHidden.EntireRow.Hidden = True
Этот код прикреплен у меня к кнопочке и скрывает пустые ячейки. Проблема в том что комп задумывает и притормаживает когда я пользуюсь этой кнопкой. Вопрос: Можно ли как то упростить оптимизировать данный код, чтоб ускорить работу компа???

)
Re: Можно ли упростить
Добавлено: 25 июл 2008, 11:25
VictorM
А вот
такой вариант Вас не устроит?
и если записать макрос для первого варианта, это будет выглядеть так:
Код: Выделить всё
Sub Макрос1()
Range("AT8:AT1454").SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Range("A1").Select
End Sub
Re: Можно ли упростить
Добавлено: 25 июл 2008, 12:29
Serge_Bliznykov
VictorM, Виктор, так, насколько я понимаю, принципиальная разница!
в первом коде строки СКРЫВАЮТСЯ, а в вашем коде - строки
" писал(а):Selection.Delete Shift:=xlUp
удаляются... если я не ошибаюсь, конечно...
Re: Можно ли упростить
Добавлено: 25 июл 2008, 12:32
VictorM
ТОЧНО!!!!
СашаСВ
скрывает пустые ячейки
Прошу прощения, не доглядел

тогда вместо
Selection.Delete Shift:=xlUp нужно записать
Selection.EntireRow.Hidden = True
или лучше вообще так:
Код: Выделить всё
Sub Макрос1()
Range("AT8:AT1454").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End Sub
Re: Можно ли упростить
Добавлено: 28 июл 2008, 11:41
СашаСВ
VictorM ваш код подходит, но не совсем, я спешил и не указал в первом сообщении что мне надо скрывать не только пустые но и нулевые значения...
Re: Можно ли упростить
Добавлено: 29 июл 2008, 11:29
VictorM
Попробуйте еще вот это, вроде немного быстрее работает.
Код: Выделить всё
Sub RowsHidden()
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.Calculation = xlManual
With ThisWorkbook.Worksheets(1)
iLastRow& = .Cells(65536, 1).End(xlUp).Row
For iRow& = iLastRow& To 1 Step -1
If CStr(.Cells(iRow&, 1).Value) = "0" Or CStr(.Cells(iRow&, 1).Value) = "" Then _
.Rows(iRow&).Hidden = True
Next
End With
.Calculation = xlAutomatic
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub
Re: Можно ли упростить
Добавлено: 29 июл 2008, 12:42
Aent
ViktorM, общее замечание:
C некоторых пор я вместо .Cells(65536,..).End(xlUP) стараюсь писать
.Cells(.Rows.Сount,...).End(xlUP)

Ибо пару раз уже нарвался с 2007 Excel

Re: Можно ли упростить
Добавлено: 29 июл 2008, 12:59
VictorM
Aent,
Ибо пару раз уже нарвался с 2007 Excel
да, мысль понял, учту.
Спасибо.
Re: Можно ли упростить
Добавлено: 29 июл 2008, 14:01
Serge_Bliznykov
ой.. извините за наглость...
а мне кажется, что вот так ещё чуть-чуть лучше будет:
Код: Выделить всё
Cells(ActiveSheet.UsedRange.Rows.Count, col).End(xlUp).Row
Re: Можно ли упростить
Добавлено: 29 июл 2008, 15:37
Teslenko_EA
Здравствуйте
Serge_Bliznykov.
Я вот тут мимо проходил

...
То, что Вам кажется не всегда верно,
UsedRange.Rows.Count - считает количество строк используемого диапазона,
Если заполнение листа начинается не с первой строки, то возвращенное число не будет номером последней строки.
Код: Выделить всё
With ActiveSheet.UsedRange
LastRow = .Rows.Count + .Row - 1
End With
Евгений.