Страницы: 1
RSS
удаление скрытых строк
 
Всем Добрый день! Подскажите, пожалуйста, умные люди, как программно удалить скрытые строки? спасибо
 
---  
' Удаление скрытых строк во всем листе  
Sub KillHiddenRows()  
For Each x In ActiveSheet.Rows  
If x.Hidden Then x.Delete  
Next  
End Sub  
 
---  
' Удаление используемых скрытых строк или строк с нулевой высотой  
Sub KillUsedHiddenThinRows()  
Dim x  
For Each x In ActiveSheet.UsedRange.Rows  
If x.Hidden Or x.Height = 0 Then x.EntireRow.Delete  
Next  
End Sub  
---  
ZVI
 
Спасибо за ответ, то проблема в том, что код работает, но пропускает строки, т.е. не все спрятанные строки удаляются...
 
Если бы выложили пример XLS, в котором скрытые строки не удаляются, то нам было бы легче Вам помочь...  
 
Совет: тут на форуме к ответу можно прикрепить файл...
 
{quote}{login=blondinka}{date=01.04.2008 09:10}{thema=удаление скрытых строк}{post}Спасибо за ответ, то проблема в том, что код работает, но пропускает строки, т.е. не все спрятанные строки удаляются...{/post}{/quote}  
попробуйте заменить ActiveSheet.UsedRange.Rows  
 
на range(cells(1,1),Cells.SpecialCells (xlLastCell)).rows
 
Спасибо всем за содействие! Первый раз на форуме, буду чаще заходить :) В общем-то у меня была задача, где ненужные строки было необходимо удалить, циклом For...Next не получилось, т.к. удалялись не все строки, задача была срочная, поэтому я их просто спрятала, а теперь я доработала этот код, чтобы ненужное удалялось, и необходимость удаления спрятанных строк отпала :)
 
У меня часто появляется необходимость удалить в документе скрытые строки. В принципе макрос работает, но мне пришлось его запускать 3 раза подряд, т.к. после первых двух запусков в итоге были удалены не все скрытые строки. После третьего запуска все стало ОК. Все же почему не срабатывает с первого раза? Вариант с измененной строкой от ck'y так же не срабатывает с первого раза.
 
Попробуйте обычный перебор строк, но только СНИЗУ ВВЕРХ!
 
The_Prist, гениально!  
Спасибо. Теперь все получается с первого раза
 
я уже где-то спрашивал( и высказывал свое мнение)..  
 
строки с нулевой высотой автоматически становятся скрытыми.. нет?  
 
и уже приводил наиболее быстрый(imho) алгоритм удаления - через specialcells с areas
Живи и дай жить..
 
Слэн, я читал, что это две большие разницы.
 
не знаю не знаю  
 
простейший макрос:  
Sub t()  
Rows(1).RowHeight = 1 '0  
End Sub  
 
и просмотр свойств rows(1)  
 
показывает синхронность этих изменений..
Живи и дай жить..
 
Проверка показала, что скрытые и с нулевой высотой удаляет одинаково.  
Слэн, скорее всего это (то, что я читал) относилось к строкам, скрытым автофильтром... Но точно помню, что разница была.
 
и не автофильтром :)
Живи и дай жить..
 
вот вопрос верить опыту или книге? :)  
 
может найдете ссылочку?
Живи и дай жить..
 
Попробую, конечно, но...
 
но все равно самое быстрое - specialcells и перебирать areas  
 
о есть ограничение на specialcells..  
 
которое врядли помешает..  
 
но и разница во времени будет невелика.. при небольшом количестве строк
Живи и дай жить..
 
можно через инспектор документов (в офисе 2007 он есть, в старших - не знаю).  
удаляет скрытые столбцы и строки.  
правда, он у меня накосячил со столбцами разной ширины.
 
The_Prist, подскажите какой смысл несет  ActiveSheet.UsedRange.Row - 1  
 
в Вашем посте  
 
Попробуйте так:  
 
Sub KillHiddenRows()  
Dim li as long  
For li = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count to 1 Step -1  
If rows(li).Hidden Or rows(li).Height = 0 Then rows(li).Delete  
Next li  
End Sub
Страницы: 1
Читают тему
Наверх