使VBA适用于重命名的标签&工作簿中的所有选项卡

时间:2017-07-18 08:55:06

标签: excel vba excel-vba

我对VBA一无所知,但我在网站上找到了以下代码,并在工作簿中使用它。

Private Sub Workbook_Open()
With Worksheets("WFD")
.EnableOutlining = True
.Protect Password:="XXXX", _
Contents:=True, UserInterfaceOnly:=True
End With
End Sub

我应该如何修改这个,以便如果工作表名称从" WFD"除了别的什么,代码仍然有效?此外,我希望它适用于工作簿中的所有工作表。

非常感谢

3 个答案:

答案 0 :(得分:1)

如果您希望每个工作表的代码使用以下代码:

Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In Worksheets
   With ws
    .EnableOutlining = True
    .Protect Password:="XXXX", _
    Contents:=True, UserInterfaceOnly:=True
   End With
Next
End Sub

答案 1 :(得分:1)

您应该使用Sheet Object Codename。 这可以在VB项目中的工作表对象旁边的VB编辑器中找到。

默认情况下,它们是Sheet1,Sheet2等。您可以通过单击并键入新名称等轻松更改它们。

如果您愿意,您当然可以将它们保留为默认代码名称... 这与工作表名称不同,工作表名称在Excel界面的“工作表”选项卡上由用户更改。

Private Sub Workbook_Open()
    With WFD 'where WFD is the CODENAME of the Sheet Object!
        .EnableOutlining = True
        .Protect Password:="XXXX", _
        Contents:=True, UserInterfaceOnly:=True
    End With
End Sub

答案 2 :(得分:0)

您可以编写Worksheets(1)Worksheets(5),具体取决于工作表的编号。但是,如果您开始添加和删除工作表,它将无法工作(例如,它将在其他工作表上工作)。要查看工作表的关联编号,请运行此选项并检查即时窗口:

Option Explicit

Public Sub TestMe()

    Dim ws  As Worksheet
    Dim cnt As Long

    For cnt = 1 To ThisWorkbook.Worksheets.Count
        Debug.Print cnt; "-> "; Worksheets(cnt).name
    Next cnt

End Sub

但是,如果您只有一个工作表,Worksheets(1)将始终有效。