无论名称如何,密码保护Excel中的所有工作表?

时间:2015-02-13 16:01:25

标签: excel excel-vba vba

我希望使用密码保护所有工作表,同时保留大纲选项。我将此代码设置为在打开工作簿时运行:

 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

此代码有效,但我想避免这种情况 - 如果重命名选项卡,则会出现运行时错误。如何在没有硬编码的情况下打开工作簿时如何成功引用和密码保护所有工作表?我的代码出了什么问题?

1 个答案:

答案 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