Если вам нужно повторить код, аналогичный код должен быть помещен либо в al oop, либо в подпрограммы, которые вы можете вызвать с нужным параметром, поэтому повторно используйте ту же подпрограмму с другими параметрами.
Обратите внимание, что Range(Target.Address)
- это то же самое, что написать просто Target
.
Например, следующее в модуль:
Option Explicit
Public Enum ToggleMode
tmYesNo
tmOther
End Enum
Public Sub ToggleRows(ByVal Mode As ToggleMode, ByVal CheckRange As Range, ByVal Target As Range, ByVal RowsAddress As String)
If Not Application.Intersect(CheckRange, Target) Is Nothing Then
Dim ToggleRange As Range
Set ToggleRange = Target.Parent.Rows(RowsAddress).EntireRow
If Mode = tmYesNo Then
Select Case Target.Value
Case "-", "Yes": ToggleRange.Hidden = True
Case "No": ToggleRange.Hidden = False
End Select
ElseIf Mode = tmOther Then
Select Case Target.Value
Case Is = "Other": ToggleRange.Hidden = False
Case Is <> "Other": ToggleRange.Hidden = True
End Select
End If
End If
End Sub
И следующее в вашем код листа:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.CountLarge > 1 Then Exit Sub 'exit if target is a range and not a single cell.
ToggleRows tmYesNo, Me.Range("F7"), Target, "8:20"
ToggleRows tmOther, Me.Range("B8"), Target, "9:10"
ToggleRows tmYesNo, Me.Range("C11"), Target, "12:1"
End Sub