vba按钮点击隐藏和取消隐藏几行

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

我有这个宏,连接到一个按钮来隐藏和取消隐藏一行。

Sub Cloud_Click()

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

If ws.Shapes("Cloud 2").TextFrame2.TextRange.Text = "openen" Then
    ws.Shapes("Cloud 2").TextFrame2.TextRange.Text = "verbergen"
    ws.Rows("5").Hidden = False
Else
    ws.Shapes("Cloud 2").TextFrame2.TextRange.Text = "openen"
    ws.Rows("5").Hidden = True
End If

End Sub

这是第 5 行,但我希望它适用于多行,所以它可以是第 5 行,然后是 10、15、20、22、26 等等。

但我似乎不知道如何向过程中添加多行。

请帮忙:)

我尝试添加多个行号,但每次都会出错

excel vba button
1个回答
0
投票

有几种方法可以做到这一点。最佳解决方案可能取决于您如何识别要显示/隐藏的行 - 您刚刚列出了一些行作为示例。

Dim r As Range
Set r = ws.Range("5:5,10:10,15:15,20:20,22:22,26:26").EntireRow
If ws.Shapes("Rectangle 1").TextFrame2.TextRange.Text = "openen" Then
    ws.Shapes("Rectangle 1").TextFrame2.TextRange.Text = "verbergen"
    r.Hidden = False
Else
    ws.Shapes("Rectangle 1").TextFrame2.TextRange.Text = "openen"
    r.Hidden = True
End If

或者使用数组并循环它:

Dim rowList As Variant, i As Long
rowList = Array(5, 10, 15, 20, 22, 26)

Dim show As Boolean
show = ws.Shapes("Rectangle 1").TextFrame2.TextRange.Text = "openen"
ws.Shapes("Rectangle 1").TextFrame2.TextRange.Text = IIf(show, "verbergen", "openen")

For i = LBound(rowList) To UBound(rowList)
    ws.Rows(rowList(i)).Hidden = Not show
Next i

如果您有很多行要显示/隐藏,首先使用

Union
可能会更快。设置
hidden
属性是一项相当慢的操作,将其减少到仅一次调用可能会更快。

rowList = Array(5, 10, 15, 20, 22, 26)
Dim r As Range
For i = LBound(rowList) To UBound(rowList)
    If r Is Nothing Then
        Set r = ws.Rows(rowList(i))
    Else
        Set r = Union(r, ws.Rows(rowList(i)))
    End If
Next i
r.EntireRow.Hidden = Not show

如果您只想显示/隐藏每 5 行,一个简单的 for 循环就可以解决问题(同样,您可以考虑使用 Union 的逻辑来加快速度)。

Dim row As Long
For row = 5 to 100 Step 5
    ws.Rows(row).Hidden = Not show
Next row

或者您想要显示/隐藏的行可能有一个特殊的标记。以下代码假设这些行有一个

"X"
if 列 A:

Dim markers As Variant, row As Long
markers = ws.Range("A1:A100").Value

For row = 1 To UBound(markers, 1)
    If markers(row, 1) = "X" Then
        ws.Rows(row).Hidden = Not show
    End If
Next
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.