我在最近几个小时遇到这个问题,我真的很感激它的一些帮助。
基本上,我希望能够根据用户对用户表单的选择隐藏/取消隐藏形状。我把问题分解成一个非常简单的例子。如果我插入一个名为"椭圆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
我收到错误"请求形状被锁定以进行选择"
工作簿没有受到保护,我尝试在形状属性上取消勾选锁定和锁定的文本。
任何想法导致了这一点。
答案 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
答案 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