我希望允许文档用户编辑工作表上的特定形状,即Shape.Type = msoOvalShapes
但是,当我使用DrawingObjects:= False保护我的图纸时,可以编辑所有对象,例如,我希望保持静止不动的图片和矩形。
我已经做过一些研究,但是还没有发现有人将图形对象限制为仅特定对象类型的示例。以下是我当前的Workbook_Open协议。
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
ws.Activate
ActiveWindow.Zoom = 100
With ws
.Protect Password:="", UserInterfaceOnly:=True
.EnableOutlining = True
.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
End With
Application.ScreenUpdating = True
End Sub
是否可以保护工作表中的特定对象?
答案 0 :(得分:1)
当您执行默认的“ .Protect”时,例如在ThisWorbook> Sub Workbook_Open中,无法移动或编辑通过excel应用程序工作表中“属性”选项卡锁定的所有项目。
但是,当通过命令按钮添加新对象/形状时,它们也被锁定。
要对其进行更改,以使新添加的对象/形状不被锁定,我进入创建该对象的Sub,并将通过此Sub添加的任何新对象的“ Locked”属性设置为False。例如,这是我的代码:
Sub AddShape()
Dim s As Shape
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
Set s = ws.Shapes.AddShape(msoShapeOval, 775 + w * 3, 100 + w * 2, 20, 20)
s.TextFrame.Characters.Text = w
s.TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter
s.TextFrame2.VerticalAnchor = msoAnchorMiddle
s.Fill.BackColor.RGB = RGB(250, 0, 0)
s.Fill.ForeColor.RGB = RGB(250, 0, 0)
s.Locked = False 'This is the crucial part
End Sub
回到我的WorkBook_Open子目录中,我没有在保护功能下调用DrawingObjects。例如:
Sub Workbook_Open()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
ws.Activate
'Protect the worksheet from being edited
With ws
.Protect Password:="", UserInterfaceOnly:=True
.EnableOutlining = True
.Protect Contents:=True, Scenarios:=True
'Notice how DrawingObjects is not included, thus the default Protect is use
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
现在,每次我的CommandButton调用AddShape时,都会出现一个可移动和可编辑的新圆圈。我通过“属性”选项卡锁定的任何形状均不可移动或不可编辑。解决了。谢谢dwirony带领我朝正确的方向前进。