密码保护在Excel中的所有工作表打开,不pipe名字?

我想用密码保护所有工作表,同时保留概述选项。 我有这个代码集打开工作簿时运行:

Option Explicit Private Sub Workbook_Open() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets With ws .Protect "password1", , , , True .EnableOutlining = True .Protect Contents:=True, UserInterfaceOnly:=True End With End Sub 

不幸的是,它不起作用 – 打开工作簿后,一些表保持不受保护。 我有另一个VBA方法,通过硬编码引用单独的工作表选项卡名称:

 Private Sub Workbook_Open() With Sheets("Instructions Worksheet") .Protect "password1", , , , True .EnableOutlining = True End With 

此代码工作,但我想避免这一点 – 如果一个选项卡被重命名,那么你会得到一个运行时错误。 在打开工作簿时如何成功地引用和密码保护所有工作表,而无需硬编码? 我的代码有什么问题?

在VBA For循环中,需要使用variables名称来closuresNext语句。

所以在你的代码中你有

 For Each ws In ThisWorkbook.Worksheets 

这需要closures一个

 Next ws 

完整的代码如下所示:

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