Здравствуйте! искал искал не нашел, хотя наверное плохо искал. как сделать чтобы автоматически скрывались все строки если значение в столбце, например, "Е" пусто или равно 0. и также автоматически показывались если значение в столбце >0
Здравствуйте! искал искал не нашел, хотя наверное плохо искал. как сделать чтобы автоматически скрывались все строки если значение в столбце, например, "Е" пусто или равно 0. и также автоматически показывались если значение в столбце >0AKSENOV048
Сообщение отредактировал AKSENOV048 - Среда, 07.09.2011, 02:32
в скрытые строки изменения заносятся с помощью формы, которая добавляет данные в первую пустую строку. iLastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
"автоматически" не знаю, может быть связать это как то с Private Sub Worksheet_SelectionChange(ByVal Target As Range)
в скрытые строки изменения заносятся с помощью формы, которая добавляет данные в первую пустую строку. iLastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
"автоматически" не знаю, может быть связать это как то с Private Sub Worksheet_SelectionChange(ByVal Target As Range)AKSENOV048
в скрытые строки изменения заносятся с помощью формы, которая добавляет данные в первую пустую строку. iLastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Это, как бы, не первая пустая, а строка, следующая за последней заполненной. А судя по вопросу, еще могут быть пустые строки в середине.
Quote (AKSENOV048)
в скрытые строки изменения заносятся с помощью формы, которая добавляет данные в первую пустую строку. iLastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Это, как бы, не первая пустая, а строка, следующая за последней заполненной. А судя по вопросу, еще могут быть пустые строки в середине.Michael_S
Sub ert() Dim r As Range, rng As Range Set rng = Range("E1:E10") Application.ScreenUpdating = False For Each r In rng.Cells r.EntireRow.Hidden = r.Value <= 0 Next Application.ScreenUpdating = True End Sub
Для примера
Code
Sub ert() Dim r As Range, rng As Range Set rng = Range("E1:E10") Application.ScreenUpdating = False For Each r In rng.Cells r.EntireRow.Hidden = r.Value <= 0 Next Application.ScreenUpdating = True End Sub
Это, как бы, не первая пустая, а строка, следующая за последней заполненной.
конечно вы правы, я просто чуть не правильно объяснил, извиняюсь. Да Вы правы строки с нулевым значением в столбце Е могут быть. nilem, хороший макрос, осталось мне придумать как сделать чтобы он автоматически срабатывал. на событие Worksheet_SelectionChange не подошло, т.к. это маленькое зависание при каждом щелчке по ячейке. сейчас пока прилепил запуск макроса по окончанию работы формы Application.Run "ert", но все равно это не то. да и как можно заменить rng = Range("E1:E10") на ("E3:E")
Michael_S,
Quote (Michael_S)
Это, как бы, не первая пустая, а строка, следующая за последней заполненной.
конечно вы правы, я просто чуть не правильно объяснил, извиняюсь. Да Вы правы строки с нулевым значением в столбце Е могут быть. nilem, хороший макрос, осталось мне придумать как сделать чтобы он автоматически срабатывал. на событие Worksheet_SelectionChange не подошло, т.к. это маленькое зависание при каждом щелчке по ячейке. сейчас пока прилепил запуск макроса по окончанию работы формы Application.Run "ert", но все равно это не то. да и как можно заменить rng = Range("E1:E10") на ("E3:E")AKSENOV048
Сообщение отредактировал AKSENOV048 - Среда, 07.09.2011, 11:25
Если столбец заполняется из формы, то можно так, например. Вот это в стандартный модуль:
Code
Sub HideRows() Dim x(), i&, hr As Range: Application.ScreenUpdating = 0 With Range([e1], Cells(Rows.Count, 5).End(xlUp)) x = .Value For i = 3 To UBound(x) If x(i, 1) = 0 Then If hr Is Nothing Then Set hr = .Cells(i) Else Set hr = Union(hr, .Cells(i)) End If Next i .EntireRow.Hidden = False End With If Not hr Is Nothing Then hr.EntireRow.Hidden = True Application.ScreenUpdating = 1 End Sub
А где-нибудь в конце работы формы:
Code
Call Module1.HideRows
Если столбец заполняется из формы, то можно так, например. Вот это в стандартный модуль:
Code
Sub HideRows() Dim x(), i&, hr As Range: Application.ScreenUpdating = 0 With Range([e1], Cells(Rows.Count, 5).End(xlUp)) x = .Value For i = 3 To UBound(x) If x(i, 1) = 0 Then If hr Is Nothing Then Set hr = .Cells(i) Else Set hr = Union(hr, .Cells(i)) End If Next i .EntireRow.Hidden = False End With If Not hr Is Nothing Then hr.EntireRow.Hidden = True Application.ScreenUpdating = 1 End Sub