Страницы: 1 2 След.
RSS
Скрыть/Отобразить "пустые" строки. VBA
 
Есть файл, в котором надо нажатием кнопки скрыть/отобразить строки, которые пусты визуально (на самом деле в них формулы). Дополнительную сложность представляют столбцы залитые зелёным (в них есть значения, но строки надо скрывать невзирая на них).  
 
Спасибо.  
 
9,72 Кб в архиве.
 
А просто автофильтром?
Я сам - дурнее всякого примера! ...
 
может как нибудь так?  
If Value(Cells(i, 2)) > 0 Then Rows("i:i").RowHeight = 0  
 
или наверное <> "" по первому столбцу  
то был я
Спасибо
 
Если именно ВБА, то:  
Public Sub RowHide()  
Dim i As Integer  
For i = 4 To 20  
If Cells(i, 1).Value = "" Then Rows(i).RowHeight = 0  
Next  
End Sub  
 
Public Sub RowsShow()  
   Rows("4:20").RowHeight = 15  
End Sub
Я сам - дурнее всякого примера! ...
 
только через  
Range
Спасибо
 
Или, если строго следовать заданию:  
Public Sub RowHide()  
Dim i As Integer  
For i = 4 To 20  
If Cells(i, 1).Value = "" Then Rows(i).Hidden = True  
Next  
End Sub  
 
Public Sub RowsShow()  
   Rows("4:20").Hidden = False  
End Sub
Я сам - дурнее всякого примера! ...
 
ну да это меня клинит
Спасибо
 
Всем спасибо, но это конечно не решение...  
Серёг, Rows("4:20").Hidden = False я и сам макрорекордером могу записать :-)  
Количество строк для отображения/скрытия заранее неизвестно, оно получается в результате работы формул, содержащихся в этих строках.  
 
Кстати круче было бы не по кнопке скрывать строки, а по заполнению строк, реал тайм.
 
Так?  
Public Sub RowHide()  
Dim i As Integer, lr As Long  
[A2].CurrentRegion.Select
lr = [A2].CurrentRegion.Rows.Count
For i = 4 To lr  
If Cells(i, 1).Value = "" Then Rows(i).Hidden = True  
Next  
End Sub  
<<<Кстати круче было бы не по кнопке скрывать строки, а по заполнению строк, реал тайм. >>> Это как? Заполнять скрытые строки, после чего они должны отобразиться?
Я сам - дурнее всякого примера! ...
 
Соответсвенно:  
Public Sub RowsShow()  
Dim lr As Long  
lr = [A2].CurrentRegion.Rows.Count
   Rows("4:" & lr).Hidden = False  
End Sub  
В прошлом посте строка с селектом лишняя. Забыл удалить.
Я сам - дурнее всякого примера! ...
 
или так  
Public Sub RowHide()  
Dim i As Integer  
Dim lLastRow As Long  
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
For i = 4 To lLastRow  
If Cells(i, 1).Value = "" Then Rows(i).Hidden = True  
Next  
End Sub
 
{quote}{login=KuklP}{date=16.08.2010 10:36}{thema=}{post}Так?  
Public Sub RowHide()  
..............................{/post}{/quote}По коду: Да, так, спасибо.  
По "хотелке": Типа. Если в результате работы формулы в скрытой строке появилось значение - она отображается. И наооборот.  
 
ЗЫ Код медленно очень работает, можно к нему прогрессбар привинтить красивый?
 
lr = [A2].CurrentRegion.Rows.Count
 
Сергей прокомментируй пж CurrentRegion
Спасибо
 
Ну, для меня разницы никакой.  
Так же правильно и так же медленно...
 
это было ему KuklP  
просто я не знаю что это
Спасибо
 
Такая фенька не всегда срабатывает при последних скрытых строках. Я сознательно пошел другим путем.  
Вообще правильней будет:  
lr = [A2].CurrentRegion.Rows.Count + [A2].CurrentRegion.Row - 1
Но в этом конкретном случае такое не важно.  
Если есть желание гляньте тему: http://www.planetaexcel.ru/forum.php?thread_id=18295    
Там о том же есть.
Я сам - дурнее всякого примера! ...
 
Public Sub RowHide()  
Dim i As Integer, lr As Long  
Application.ScreenUpdating = False  
lr = [A2].CurrentRegion.Rows.Count + [A2].CurrentRegion.Row - 1
For i = 4 To lr  
If Cells(i, 1).Value = "" Then Rows(i).Hidden = True  
Next  
Application.ScreenUpdating = True  
End Sub  
Так быстрей.  
CurrentRegion - это текущий диапазон, отделенный от других пустыми строками и столбцами.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KuklP}{date=16.08.2010 10:59}{thema=}{post}Так быстрей.{/post}{/quote}Ага! То что надо. Спасибо Серёг!  
ЗЫ Задача решена. Как насчёт онлайн изменений?
 
Вот так будет работать только если в столбец Н данные будут вводиться вручную.  
При формульных изменениях событие Worksheet_Change не возникает.  
Private Sub Worksheet_Change(ByVal Target As Range)  
   If Target.Column <> 8 Then Exit Sub  
   If Target.Value <> 0 Then  
       Target.EntireRow.Hidden = False  
   Else  
       Target.EntireRow.Hidden = True  
   End If  
End Sub
Я сам - дурнее всякого примера! ...
 
Но опять же, как ты внесешь данные в скрытую строку? Ерунда...  
Мож чего позже в голову прийдет.  
 
99550
Я сам - дурнее всякого примера! ...
 
{quote}{login=KuklP}{date=16.08.2010 11:15}{thema=}{post}Но опять же, как ты внесешь данные в скрытую строку? Ерунда...{/post}{/quote}Я ничего в скрытую строку вносить не собираюсь :-)  
Там есть формулы, которые могут возвращать 0, а могут и не ноль. Так вот если не ноль, то строка должна отобразится, если 0, то остаётся скрытой.
 
Вот так можно, но... Пробуй.  
В модуль листа:  
Private Sub Worksheet_Calculate()  
RowHide  
End Sub  
В общий модуль:  
Public Sub RowHide()  
Dim i As Integer, lr As Long  
Application.ScreenUpdating = False  
Application.EnableEvents = False  
lr = [A2].CurrentRegion.Rows.Count + [A2].CurrentRegion.Row - 1
For i = 4 To lr  
If Cells(i, 9).Value = 0 Then  
Rows(i).Hidden = True  
Else  
Rows(i).Hidden = False  
End If  
Next  
Application.EnableEvents = True  
Application.ScreenUpdating = True  
End Sub  
Но будет дрыгаться на каждый чих.  
 
97337
Я сам - дурнее всякого примера! ...
 
А без Worksheet_Calculate() нельзя обойтись?  
Чтоб только при изменениях, а не при каждом пересчёте?
 
Добрый день. Как  при помощи VBA  подкорректировать ,  
что-бы можно было скрыть-отобразить незаполненные ячейкив строках  
По одной  расходной накладной можно отпустить  
несколько товара и ячейки A10,B12  нет необходимости заполнять  
 
Т.Е невсегда  ячейки А10,  B12   могут быть заполнены  
 
я в ячейках A10:A13  прописал знак ="" - работает  
После  каждого открытия книги нужно прописывать знак ="" -это неудобно  
Спасибо.  
Юра
yuresky
 
без знака =""
 
Спасибо.Вариант отличный. А если все строки заполнены,то выдает ошибку, так как нет пустых строк. А как устранить эту ошибку?  
Спасибо.
yuresky
 
исправил.
 
Есть файл, в  котором есть 2 кнопки : "Скрыть" и "Отобразить".    
Условия выбираются фильтром, а затем кнопки скрывают пустые ячейки, если таковые есть в диапазоне, либо отображают все ячейки  
 
Писал макрос не я, потому ничего сказать о его содержимом не могу. Всё прекрасно работало. Добавлял строки и столбцы в таблицу....но в какой то момент просто перестал работать. Хотя в содержимое макроса не лазил нигде, кроме прописывания диапазона в котором и должно проверяться наличие/отсутствие содержимого ячеек.  
 
В данный момент скрываются абсолютно все солбцы(не важно пустые или нет), а строки наоборот: скрываются только на части диапазона.  
Прошу помощи!!! Заранее благодарен, если здесьобитающие ГУРУ просветят меня в моей безграмотности!  
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
{quote}{login=Serge 007}{date=17.08.2010 12:03}{thema=}{post}А без Worksheet_Calculate() нельзя обойтись?  
Чтоб только при изменениях, а не при каждом пересчёте?{/post}{/quote}  
 
Скажите пожалуйста, удалось решить проблему с отображением только тех строк, в которых выводится визуальная информация, с учетом вышеозвученного Serge 007?
 
Как понять - визуальная информация?
Страницы: 1 2 След.
Читают тему
Наверх