Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
使VBA应用于重命名的选项卡&;工作簿中的所有选项卡_Vba_Excel - Fatal编程技术网

使VBA应用于重命名的选项卡&;工作簿中的所有选项卡

使VBA应用于重命名的选项卡&;工作簿中的所有选项卡,vba,excel,Vba,Excel,我对VBA不太了解,但我在一个网站上找到了下面的代码,并在一个工作簿中使用它 Private Sub Workbook_Open() With Worksheets("WFD") .EnableOutlining = True .Protect Password:="XXXX", _ Contents:=True, UserInterfaceOnly:=True End With End Sub 我应该如何修改它,以便如果图纸名称从“WFD”更改为其他名称,代码仍然有效?此外,我希望它适用于工

我对VBA不太了解,但我在一个网站上找到了下面的代码,并在一个工作簿中使用它

Private Sub Workbook_Open()
With Worksheets("WFD")
.EnableOutlining = True
.Protect Password:="XXXX", _
Contents:=True, UserInterfaceOnly:=True
End With
End Sub
我应该如何修改它,以便如果图纸名称从“WFD”更改为其他名称,代码仍然有效?此外,我希望它适用于工作簿中的所有工作表


非常感谢

您可以根据工作表的编号编写
工作表(1)
工作表(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

但是,如果您只有一个工作表,
工作表(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

您应该使用图纸对象代码名。 这可以在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

这是保护代码不受用户更改影响的最安全的方法