0

我正在尝试在 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

我在用 ** 包裹的行上遇到类型不匹配错误。谁能告诉我哪里出错了?

谢谢

4

2 回答 2

0

不知道为什么在@Randy 指出的错误被修复后它仍然会出现错误,但我可以告诉你我在做什么。我没有遍历每张工作表,而是直接访问要保护的工作表。这是通过代码名称完成的,而不是 GUI 中的名称。例如,在 VBA 编辑器的 Project Explorer 中,在“Microsoft Excel Objects”文件夹下,单击“Testing”工作表并看到它具有“TestingSheet”的“(Name)”属性。请注意,为清楚起见,这可能只是一个可选步骤,因为我的其他工作表也有名称 - 例如“Sheet1”。然后在代码中我只需键入:

TestingSheet.Protect , True, True, True, True

如果这样做,您将避免运行时错误,并且在工作表的 GUI 名称方面也将更加灵活。

于 2012-05-01T13:02:50.713 回答
0

那行应该是:

If sh.Name = "Sheet 2" Or sh.Name = "Sheet 3" Then

出现类型不匹配错误是因为您将字符串 ( "Sheet 3") 视为布尔值 ( True/ False)。

于 2012-05-01T13:03:16.067 回答