我有一段通用代码用于隐藏我正在创建的 excel 文档的行,我将在此电子表格中大量使用此代码,并且已经到了出现错误“程序太大”的地步。有问题的代码是:
Private Sub Worksheet_Change(ByVal Target As Range)
''''''''General Selection statement'''''''
If Not Application.Intersect(Range("F7"), Range(Target.Address)) Is Nothing Then
Select Case Target.Value
Case Is = "-": Rows("8:20").EntireRow.Hidden = True
Case Is = "No": Rows("8:20").EntireRow.Hidden = False
Case Is = "Yes": Rows("8:20").EntireRow.Hidden = True
End Select
End If
If Not Application.Intersect(Range("B8"), Range(Target.Address)) Is Nothing Then
Select Case Target.Value
Case Is = "Other": Rows("9:10").EntireRow.Hidden = False
Case Is <> "Other": Rows("9:10").EntireRow.Hidden = True
End Select
End If
If Not Application.Intersect(Range("C11"), Range(Target.Address)) Is Nothing Then
Select Case Target.Value
Case Is = "-": Rows("12:19").EntireRow.Hidden = True
Case Is = "Yes": Rows("12:19").EntireRow.Hidden = False
Case Is = "No": Rows("12:19").EntireRow.Hidden = True
End Select
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
是否可以创建一个子例程然后在需要时调用它?选定的单元格会改变,但范围会保持不变,我希望这是有道理的吗?我是 VBA 的新手,所以任何帮助将不胜感激。
如果您需要重复代码,应将类似的代码放入循环中或放入您可以使用所需参数调用的子程序中,因此请使用不同参数重新使用相同的子程序。
请注意,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
Run Code Online (Sandbox Code Playgroud)
以及您的工作表代码中的以下内容:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |