Добрый день! Нужен макрос, способный Скрыть\Показать строки аналогично первому листу. Вообщем, чтоб человек в 1 листе скрыл\отобразил необходимые строки, а при переключении на 2,3,4,... листы они автоматом скрывали\отображали строки в соответствии с 1 листом. Это вообще возможно??? Уже полдня не могу ни написать, ни найти решение. Заранее спасибо.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. А в том, чтобы писать программы, работающие при любом количестве ошибок.
на 1 листе скрыты строки. макрос должен при выборе листа 2 или 3 скрывать те строки, что скрыты в 1 листе если вдруг я раскрою строки и скрою другие строки на 1 листе, макрос должен повторить тоже самое на 2 и 3 листе при их выборе
Макрос в отдельный модуль. Вызов макроса на событие активации листа. Пример вызова макроса в процедуре "test".
Скрытый текст
Код
Option Explicit
Sub hide_rows_by_pattern(rngPatternRows As Range, wshTarget As Worksheet)
If StrComp(rngPatternRows.Parent.Name, wshTarget.Name, vbTextCompare) = 0 Then Exit Sub
Dim rw As Range, strAddr As String
With rngPatternRows.EntireRow
For Each rw In .Rows
If rw.Hidden Then strAddr = strAddr & rw.Address(False, False) & ","
Next rw
End With ' rngPatternRows.CurrentRegion
If Len(strAddr) > 0 Then
strAddr = Left(strAddr, Len(strAddr) - 1)
With wshTarget
.Range(rngPatternRows.Address).EntireRow.Hidden = False
.Range(strAddr).EntireRow.Hidden = True
End With ' wshTarget
End If ' Len(strAddr) > 0
End Sub
Sub test()
Call hide_rows_by_pattern(ActiveWorkbook.Worksheets("Лист1").Cells(1, 1).CurrentRegion, ActiveWorkbook.Worksheets("Лист2"))
End Sub
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
lrow_1sh = Sheets(1).Cells.SpecialCells(xlLastCell).Row
lrow_ash = ActiveSheet.Cells.SpecialCells(xlLastCell).Row
lrow = IIf(lrow_1sh > lrow_ash, lrow_1sh, lrow_ash)
ReDim r_height(1 To lrow)
For i = 1 To lrow
r_height(i) = Sheets(1).Rows(i).RowHeight
Next
With ActiveSheet
For i = 1 To lrow
ActiveSheet.Rows(i).RowHeight = r_height(i)
Next
End With
End Sub