在VBA(excel)中组合隐藏和显示分组数据的makros

Combining hide and show makros for grouped Data in VBA( excel)

提问人:CodingDonut 提问时间:11/16/2023 最后编辑:CodingDonut 更新时间:11/16/2023 访问量:31

问:

刚在Excel中启动VBA,我想创建一个结合两个功能的Makro, 这些是在单击链接的 Button 时折叠和展开分组的数据行。 我让 makros 单独运行,但现在我想将它们组合成一个 Makro,我可以将其签名给一个按钮,单击该按钮时会检查 ShowDetail 属性的 True/False 状态并分别覆盖状态。

Sub Expand1()

   Rows(2).EntireRow.ShowDetail = True
         
End Sub

Sub Collapse1()

   Rows(2).EntireRow.ShowDetail = False
    
End Sub

我尝试使用 If Then Logic,但是当我执行以下代码时,Excel 会吐出运行时错误 1004:“ showDetail 属性无法更改。

Sub Colland()

    If Rows(2).EntireRow.ShowDetail = True Then
        Rows(2).EntireRow.ShowDetail = False
    Else: Rows(2).EntireRow.ShowDetail = True
    End If
    
End Sub

我猜我无法更改属性状态,因为它是正在检查的属性。但实际上,我相当无知。任何帮助将不胜感激

Excel VBA

评论

0赞 Paul 11/16/2023
只要第 2 行是摘要行,您的代码就可以正常工作。如果它是要折叠的行之一,它将折叠正常,但在下次运行时会抛出该错误。
0赞 CodingDonut 11/16/2023
谢谢。因此,为了使其正常运行,我需要选择要折叠的行上方的一行?
0赞 Paul 11/16/2023
上方或下方,取决于您坍塌的方向。它必须是显示符号(或折叠时)的行-+
0赞 CodingDonut 11/16/2023
谢谢。这是信息传递的误区。祝您度过美好的一天:)

答:

1赞 CodingDonut 11/16/2023 #1

多亏了善意的评论,我才能够让 makro 正确执行 我还修改了代码以针对活动单元格而不是特定行,并将其与单击一系列单元格时触发的代码相结合。

Sub Colland()

If ActiveCell.EntireRow.ShowDetail = True Then
    ActiveCell.EntireRow.ShowDetail = False
Else: ActiveCell.EntireRow.ShowDetail = True
End If

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count = 1 Then
    If Not Intersect(Target, Range("A4:A85")) Is Nothing Then
        Call Colland
    End If
End If

End Sub

这非常适合我的预期目的,因为我正在处理 A4 和 A85 之间的多组数据。谢谢@Paul