Добрый день! Хочу скрыть строки в зависимости от значения в ячейке. Нужный макрос нашел, он работает. НО. Приходится нажимать на кнопку, а хочется, чтобы макрос сам отлавливал изменения в ячейках и скрывал/показывал строку в зависимости от значения в ячейке. Я попробовал сам написать, но не получилось(. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("I:I")) Is Nothing Then Exit Sub
Dim cell As Range Application.ScreenUpdating = False
For Each cell In ActiveSheet.UsedRange.Columns(9).Cells If cell.Value = "Скрыть" Then cell.EntireRow.Hidden = True Next Application.ScreenUpdating = True End Sub
[/vba] Файл прикрепляю.
Добрый день! Хочу скрыть строки в зависимости от значения в ячейке. Нужный макрос нашел, он работает. НО. Приходится нажимать на кнопку, а хочется, чтобы макрос сам отлавливал изменения в ячейках и скрывал/показывал строку в зависимости от значения в ячейке. Я попробовал сам написать, но не получилось(. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("I:I")) Is Nothing Then Exit Sub
Dim cell As Range Application.ScreenUpdating = False
For Each cell In ActiveSheet.UsedRange.Columns(9).Cells If cell.Value = "Скрыть" Then cell.EntireRow.Hidden = True Next Application.ScreenUpdating = True End Sub
Положите макрос не в модуль книги, а в модуль листа (Правой мышой на ярлык листа - Исходный код - откроется окошко - вот туда макрос и нужно писать
Ну и сам макрос немного иначе нужно [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Columns(2)) Is Nothing Then Exit Sub Dim cell As Range Application.ScreenUpdating = False For Each cell In ActiveSheet.UsedRange.Columns(9).Cells cell.EntireRow.Hidden = cell.Value = "Скрыть" Next Application.ScreenUpdating = True End Sub
[/vba]
Положите макрос не в модуль книги, а в модуль листа (Правой мышой на ярлык листа - Исходный код - откроется окошко - вот туда макрос и нужно писать
Ну и сам макрос немного иначе нужно [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Columns(2)) Is Nothing Then Exit Sub Dim cell As Range Application.ScreenUpdating = False For Each cell In ActiveSheet.UsedRange.Columns(9).Cells cell.EntireRow.Hidden = cell.Value = "Скрыть" Next Application.ScreenUpdating = True End Sub
Спасибо! Все работает! Получается макрос отслеживает изменение только во втором столбце? А можно такой макрос сделать для всей книги, а не для одного листа?
Спасибо! Все работает! Получается макрос отслеживает изменение только во втором столбце? А можно такой макрос сделать для всей книги, а не для одного листа?shtirlic39
Конечно. Вот теперь нужно класть в модуль книги [vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) With Sh If Intersect(Target, .Columns(2)) Is Nothing Then Exit Sub Dim cell As Range Application.ScreenUpdating = False For Each cell In Sh.UsedRange.Columns(9).Cells cell.EntireRow.Hidden = cell.Value = "Скрыть" Next Application.ScreenUpdating = True End With End Sub
Конечно. Вот теперь нужно класть в модуль книги [vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) With Sh If Intersect(Target, .Columns(2)) Is Nothing Then Exit Sub Dim cell As Range Application.ScreenUpdating = False For Each cell In Sh.UsedRange.Columns(9).Cells cell.EntireRow.Hidden = cell.Value = "Скрыть" Next Application.ScreenUpdating = True End With End Sub