如何简洁地取消隐藏不在一起的行?

问题描述 投票:0回答:1

我是编码初学者,特别是 VBA 初学者。我有一个 Excel 文档,其中隐藏了几行。我需要简洁地取消隐藏这些行,一次三到四行,直到它们全部取消隐藏。我有一个由形状制成的按钮。

目前,我的代码类似于:

Sub UnhideObjectives()
Static currentStage As Integer

Rows("34:37").EntireRow.Hidden = True
Rows("42:45").EntireRow.Hidden = True
Rows("50:53").EntireRow.Hidden = True

Select Case currentStage
Case 0
Rows("34:37").EntireRow.Hidden = False
currentStage = 1
Case 1
Rows("34:37").EntireRow.Hidden = False
Rows("42:45").EntireRow.Hidden = False
currentStage = 2
Case 2
Rows("34:37").EntireRow.Hidden = False
Rows("42:45").EntireRow.Hidden = False
Rows("50:53").EntireRow.Hidden = False
currentStage = 0

End Select
End Sub

但是,我想要一个不具有循环的 currentStage 函数的代码,并且最佳情况下,它需要显示由光标激活的单元格旁边的行。

谢谢你。

excel vba show-hide
1个回答
0
投票

据我了解:

  • 您始终显示第 34 - 37 行

  • 如果阶段为 < 1

    ,则隐藏第 42 - 45 行
  • 如果阶段为 < 2

    ,则隐藏第 50 - 53 行
    Rows("34:37").EntireRow.Hidden = False
    Rows("42:45").EntireRow.Hidden = (currentStage < 1)
    Rows("50:53").EntireRow.Hidden = (currentStage < 2)
    

(请注意,如果没有其他实例隐藏第 34 - 37 行,则可以省略第一行)

之后,您将跳转到下一个阶段,但如果到达最后一个阶段(2),您将跳回第一阶段(0)。您可以通过向当前阶段添加 1 并使用模运算符来完成此操作:

  currentStage = (currentStage + 1) Mod 3

建议:始终指定您要使用的工作表。所以你的代码可能看起来像:

Sub UnhideObjectives()
    Static currentStage As Integer
    With ActiveSheet ' (Or, for example, With ThisWorkbook.Sheets(1)
        .Rows("34:37").EntireRow.Hidden = False
        .Rows("42:45").EntireRow.Hidden = (currentStage < 1)
        .Rows("50:53").EntireRow.Hidden = (currentStage < 2)
    End With
    currentStage = (currentStage + 1) Mod 3
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.