我希望使用密码保护所有工作表,同时保留大纲选项。我将此代码设置为在打开工作簿时运行:
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
此代码有效,但我想避免这种情况 - 如果重命名选项卡,则会出现运行时错误。如何在没有硬编码的情况下打开工作簿时如何成功引用和密码保护所有工作表?我的代码出了什么问题?
答案 0 :(得分:2)
在VBA For
循环中,需要使用变量名称使用Next
语句关闭。
所以在你的代码中你有
For Each ws In ThisWorkbook.Worksheets
需要用
关闭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