Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用形状作为宏隐藏/取消隐藏行的按钮_Excel_Vba - Fatal编程技术网

Excel 使用形状作为宏隐藏/取消隐藏行的按钮

Excel 使用形状作为宏隐藏/取消隐藏行的按钮,excel,vba,Excel,Vba,我使用下面的命令来隐藏和取消隐藏一些行,但是我想使用一个形状——“矩形圆角”来代替丑陋的按钮。脚本在一个按钮上运行得很好(完全符合我的要求),但只在一个实际的按钮上运行 我不知道VBA,也不知道如何让此代码使用该形状而不是按钮: Private Sub ToggleButton1_Click() Dim xAddress As String xAddress = "F:G" If ToggleButton1.Value Then Application.ActiveSheet.Colum

我使用下面的命令来隐藏和取消隐藏一些行,但是我想使用一个形状——“矩形圆角”来代替丑陋的按钮。脚本在一个按钮上运行得很好(完全符合我的要求),但只在一个实际的按钮上运行

我不知道VBA,也不知道如何让此代码使用该形状而不是按钮:

Private Sub ToggleButton1_Click()
Dim xAddress As String
xAddress = "F:G"
If ToggleButton1.Value Then
    Application.ActiveSheet.Columns(xAddress).Hidden = True
Else
    Application.ActiveSheet.Columns(xAddress).Hidden = False
End If
End Sub
我尝试按如下方式替换,但在IF行上出现424“未找到对象”错误:

Private Sub RectangleRoundedCorners9_Click()
Dim xAddress As String
xAddress = "F:G"
If RectangleRoundedCorners9.Value Then
    Application.ActiveSheet.Columns(xAddress).Hidden = True
Else
    Application.ActiveSheet.Columns(xAddress).Hidden = False
End If
End Sub
提前谢谢

奖励:我想将最终产品注入以下内容,以使形状看起来也像一个按钮:

Sub SimulateButtonClick()
Dim vTopType As Variant
Dim iTopInset As Integer
Dim iTopDepth As Integer


    With ActiveSheet.Shapes(Application.Caller).ThreeD
        vTopType = .BevelTopType
        iTopInset = .BevelTopInset
        iTopDepth = .BevelTopDepth
    End With


    With ActiveSheet.Shapes(Application.Caller).ThreeD
        .BevelTopType = msoBevelSoftRound
        .BevelTopInset = 12
        .BevelTopDepth = 4
    End With
    Application.ScreenUpdating = True


    With ActiveSheet.Shapes(Application.Caller).ThreeD
        .BevelTopType = vTopType
        .BevelTopInset = iTopInset
        .BevelTopDepth = iTopDepth
    End With

'---------------
'HIDE/UNHIDE SCRIPT HERE
'---------------
End Sub
大概是这样的:

Sub ToggleCols()

    Const RNG As String = "F:G"
    Dim s, tr

    Set s = ActiveSheet.Shapes(Application.Caller)
    Set tr = s.TextFrame2.TextRange

    ActiveSheet.Columns(RNG).Hidden = (tr.Text = "Hide")
    tr.Text = IIf(tr.Text = "Hide", "Show", "Hide")

End Sub

添加形状,然后右键单击>>分配宏并选择要运行的代码。您试图复制的“视觉行为”到底是什么?首先,上面的代码适用于“ToggleButton1”,就好像我刚刚创建了一个新按钮一样。如果我尝试将其作为宏指定给一个形状,我会得到一个424错误——“找不到对象”。当我尝试用我的形状名称替换该按钮时(可能是因为按钮和形状与VBA不同),我得到了相同的424“找不到对象”错误。更大的第二部分是使按钮看起来像是在点击时被按下的。视觉反馈不值得麻烦,或者至少不会像正常的那样,因为你不需要鼠标下/上事件。它只从点击事件中获取信息。您可以添加
Application.Wait(Now+TimeValue(“0:00:01”))
将可视状态暂停最多1s,但这仍然不太好。此外,确保所有形状名称均为30个字符或更少;这可能是
应用程序的限制。Caller
这非常有效,动态文本是一个不错的附加组件。谢谢你,先生!问题:我想为不同的范围/按钮复制此宏几次,但不确定如何执行。有什么想法吗?谢谢你,回答了我自己的问题。将代码复制粘贴到两行中,第一行“Sub”具有唯一的名称,即“ToggleCols2()