gpt4 book ai didi

excel - VBA 帮助缩短代码,引入例程?

转载 作者:行者123 更新时间:2023-12-04 21:19:00 28 4
gpt4 key购买 nike

我有一段通用代码用于隐藏我正在创建的 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

是否可以创建一个子例程,然后在需要时调用它?
选定的单元格会改变,但范围会保持不变,我希望这有意义吗?
我是 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

以及您的工作表代码中的以下内容:
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

关于excel - VBA 帮助缩短代码,引入例程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61321747/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com