Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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 VBA中保护具有不同选项的图纸?_Excel_Vba_Runtime - Fatal编程技术网

如何在Excel VBA中保护具有不同选项的图纸?

如何在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

我试图在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 "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提供上述建议。感谢您的回答,我会记住您的意见,以备将来发展。