我有这个宏,连接到一个按钮来隐藏和取消隐藏一行。
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 等等。
但我似乎不知道如何向过程中添加多行。
请帮忙:)
我尝试添加多个行号,但每次都会出错
有几种方法可以做到这一点。最佳解决方案可能取决于您如何识别要显示/隐藏的行 - 您刚刚列出了一些行作为示例。
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