使用Excel VBA展开和折叠行

3
我正在构建一个带有不同部分的表单。我不想使用命令按钮或切换按钮(它们的外观很丑),而且由于这是给客户使用的,所以我希望它易用。总之,我想构建一个宏,当他们点击形状时,它将折叠不必要的行并展开正确的行。
到目前为止,这是我能找到的...但它只适用于命令按钮。
Private Sub CommandButton1_Click()
With Me.CommandButton1
        If .Caption = "Initial Request" Then
            .Caption = "Hide Rows"
            Rows("12:20").Hidden = False
        Else
            .Caption = "Initial Request"
            Rows("12:200").Hidden = True
        End If
    End With

End Sub

这很完美地运作了...但是,有没有一种方法可以将其转换为模块,从而分配给形状?非常感谢你的帮助。

1
Excel 中的所有“形状”都可以分配一个宏。只需右击形状(箭头、矩形、气球、图片等),然后从菜单中选择“分配宏...”。 - Ralph
是的,但如果我分配这个宏,它不起作用。它会给我一个错误:编译错误:无效使用ME关键字。这就是为什么我需要一种修改此宏的方法,以便我可以将其分配给一个形状。 - Val S
如果我只是隐藏了 With Me.CommandButton1 和 End With,它就会给我错误提示 "无效或未经限定的引用"。它标记了 .Caption 信息。有什么建议吗? - Val S
2个回答

3

您可以添加一个形状,比如一个矩形,并将其分配给一个宏,使用下面等价于您的代码的方式:

Sub Rectangle2_Click()
    With Sheet3.Shapes("rectangle 2").TextFrame2.TextRange
        If .Text = "Initial Request" Then
            .Text = "Hide Rows"
            sheet3.Rows("12:20").Hidden = False
        Else
            .Text = "Initial Request"
            sheet3.Rows("12:20").Hidden = True
        End If
    End With
End Sub

显然,在这个例子中,我向Sheet3添加了一个矩形图形,并将其命名为“矩形2”。你应该根据自己的情况调整这些名称。


谢谢,我找不到可以更改“矩形2”名称的位置。我尝试了属性但没有成功。有任何想法吗? - Val S
1
不用了,我找到了,对此很抱歉。这太棒了,它像魔法一样运行!谢谢。 - Val S
嘿@ValS,如果你发现这个答案解决了你的问题,请考虑将其标记为被接受的答案。这有助于你和帮助你的人:) https://i.stack.imgur.com/LkiIZ.png - Marcucciboy2

1

尝试一下这段代码:

Option Explicit

Sub Cloud_Click()

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

If ws.Shapes("Cloud 2").TextFrame2.TextRange.Text = "Initial Request" Then
    ws.Shapes("Cloud 2").TextFrame2.TextRange.Text = "Hide rows"
    ws.Rows("12:20").Hidden = False
Else
    ws.Shapes("Cloud 2").TextFrame2.TextRange.Text = "Initial Request"
    ws.Rows("12:20").Hidden = True
End If

End Sub

我确信以下的屏幕录像将会解释剩下的部分。

enter image description here


谢谢,那个也可以 :-) 我喜欢这个视频,对新手很有帮助 :-) - Val S
1
我向你的努力致敬 :) - A.S.H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接