如何在Excel VBA中保护具有不同选项的图纸?
我试图在VBA中保护Excel工作簿中的工作表(仅可见)。我希望允许用户编辑“工作表2”和“工作表3”上的对象,但不允许编辑其他对象 这是我正在使用的代码如何在Excel VBA中保护具有不同选项的图纸?,excel,vba,runtime,Excel,Vba,Runtime,我试图在VBA中保护Excel工作簿中的工作表(仅可见)。我希望允许用户编辑“工作表2”和“工作表3”上的对象,但不允许编辑其他对象 这是我正在使用的代码 Public Sub WBOpen() Dim sh As Worksheet Dim allowObjects As Boolean For Each sh In Sheets If sh.Visible = xlSheetVisible Then **If sh.Name = "Sheet 2" Or "S
Public Sub WBOpen()
Dim sh As Worksheet
Dim allowObjects As Boolean
For Each sh In Sheets
If sh.Visible = xlSheetVisible Then
**If sh.Name = "Sheet 2" Or "Sheet 3" Then**
allowObjects = True
Else
allowObjects = False
End If
sh.Protect Password:=pw(sh), DrawingObjects:=allowObjects, Contents:=True, Scenarios:=True, AllowFormattingRows:=True, AllowFiltering:=True, UserInterfaceOnly:=True
End If
Next
End Sub
我在用**包装的行中遇到类型不匹配错误。谁能告诉我哪里出了问题
谢谢你我不知道为什么在@Randy noted的错误被修复后它仍然会有错误,但是我可以告诉你我是怎么做的。我没有遍历每个工作表,而是直接访问我想要保护的工作表。这是通过代码名完成的,而不是GUI中的名称。例如,在VBA编辑器中的项目资源管理器中的“Microsoft Excel对象”文件夹下,我单击我的“测试”工作表,并查看它是否具有“测试工作表”的“(名称)”属性。请注意,为了清楚起见,这可能只是一个可选步骤,因为我的其他工作表也有名称,如“Sheet1”。然后在代码中键入:
TestingSheet.Protect , True, True, True, True
如果这样做,将避免运行时错误,并且在工作表的GUI名称方面也将更加灵活。该行应为:
If sh.Name = "Sheet 2" Or sh.Name = "Sheet 3" Then
类型不匹配错误是因为您将字符串(
“Sheet 3”
)视为布尔值(True
/False
)。您是否尝试过:如果sh.Name=“Sheet 2”或sh.Name=“Sheet 3”也是,请确保在查看选项卡时,您引用的“Sheet 2”实际上有一个空格。默认情况下,选项卡没有空格(例如“Sheet2”)。Randy-仍然收到相同的错误Zairja-是的,工作表名称有空格Randy-好的,我一定是在试图影响您的建议时犯了一个Transp错误!当我再次尝试它时,它起了作用。非常感谢,谢谢你。也感谢@Randy提供上述建议。感谢您的回答,我会记住您的意见,以备将来发展。