通过VBA使形状在excel中不可见/可见

时间:2015-11-06 18:46:14

标签: excel vba

我在最近几个小时遇到这个问题,我真的很感激它的一些帮助。

基本上,我希望能够根据用户对用户表单的选择隐藏/取消隐藏形状。我把问题分解成一个非常简单的例子。如果我插入一个名为"椭圆1"在工作表中运行代码:

Sub hideshape()

    With ActiveSheet

        .Shapes("Oval 1").Select

        With Selection

        .Visible = False

        End With

    End With

End Sub

形状消失,但是当我运行此代码时

Sub unhideshape()

    With ActiveSheet

        .Shapes("Oval 1").Select

        With Selection

        .Visible = True

        End With

    End With

End Sub

我收到错误"请求形状被锁定以进行选择"

工作簿没有受到保护,我尝试在形状属性上取消勾选锁定和锁定的文本。

任何想法导致了这一点。

5 个答案:

答案 0 :(得分:5)

你不能Select一个隐藏的对象。但是,您根本不需要使用Select,通常不建议这样做。试试吧:

Sub HideShape()
    ActiveSheet.Shapes("Oval 1").Visible = False
End Sub
Sub UnhideShape()
    ActiveSheet.Shapes("Oval 1").Visible = True
End Sub

答案 1 :(得分:0)

我解决了这段代码的问题(Oval = Type 9,来自MsoAutoShapeType Enumeration (Office)):

Sub hide()
s = ActiveSheet.Shapes.Count
For i = 1 To s
    If ActiveSheet.Shapes(i).Type = 9 Then ActiveSheet.Shapes(i).Visible = False
Next i
End Sub

Sub unhide()
s = ActiveSheet.Shapes.Count
For i = 1 To s
    If ActiveSheet.Shapes(i).Type = 9 Then ActiveSheet.Shapes(i).Visible = True
Next i
End Sub

如果“Type = 9”错误,您可以使用立即窗口中的代码(VBA中的ctrl + G)找到您的形状类型:

?ActiveSheet.Shapes("Oval 1").Type

答案 2 :(得分:0)

Sub HideEachShape()
Dim sObject As Shape
For Each sObject In ActiveSheet.Shapes
sObject.Visible = False
Next
End Sub

来自:extendoffice.com

答案 3 :(得分:0)

我根据形状的名称隐藏形状,因为有些形状我不想隐藏。我使用这种格式: Sheet1.Shapes.Range(Array("COtxtBox1")).Visible = msoTrue

一个或多个形状的名称进入数组

如果只有1个形状,则可以使用:

Sheet1.Shapes.range("COtxtBox1").Visible = True

我发现True或False语句不需要“ mso”部分

答案 4 :(得分:-1)

Public HIDE As Boolean

    Sub T_BUTTON ()
    ActiveSheet.Shapes("T 1").Visible = HIDE
    If ActiveSheet.Shapes("T 1").Visible = False Then
    HIDE = True
    Else
    HIDE = False
    End If

END SUB