保护工作表似乎可以保护整个工作簿

时间:2015-05-25 16:17:11

标签: excel vba excel-vba

修改

这是因为工作簿已经腐败。

这似乎不值得回答我自己的问题,但在谷歌搜索非常困难所以我将其留在这里以防万一其他人有相同的问题和机会。

原始问题

我有一个Sub保护工作表并隐藏列,或者反过来取决于LockSheet是True还是False。这个想法是某些用户可以通过在对话框中输入密码来解锁工作簿的某些部分,并且锁定也会在关闭之前自动发生。 它工作正常,除了我只想保护某些工作表,我的代码似乎就是这样做的。除非我打开工作簿,否则我会被告知整个工作簿都受到保护。

任何人都知道为什么会发生这种情况?我从来没有根据我的知识保护工作簿,并尝试通过代码取消保护,但在打开它时仍然会收到密码提示......

为了理解:在下面的代码中,每个“Item”在“SheetCombinationsToProtect”中是一个具有工作表名称和列表列表的结构。

Private Sub PerformOperationOnSheetsAndColumns(SheetCombinationsToProtect As Collection, LockSheet As Boolean)

    Dim wb As Workbook
    Set wb = ActiveWorkbook
    Dim ws As Worksheet
    Dim wsName As String
    Dim wsColumns() As String
    Dim Combination As String
    Dim Password As String
    Password = GetPassword()
    For Each Item In SheetCombinationsToProtect
        Combination = Item
        wsName = GetSheetNameFromCombination(Combination)
        wsColumns = GetColumnsFromCombination(Combination)
        Set ws = wb.Sheets(wsName)
        ws.Activate
        ws.Unprotect (Password)
        For Each Col In wsColumns
                ws.Columns(ws.Range(Col & 1).Column).EntireColumn.Hidden = LockSheet
            Next Col
        If LockSheet = True Then
            ws.Protect (Password)
        Else
            ws.Activate
            ws.Cells(1, 1).Show
        End If
    Next Item
    If LockSheet = True Then
        wb.Sheets("Order  Entry").Activate
    End If

End Sub

1 个答案:

答案 0 :(得分:0)

问题是工作簿本身已损坏。这显然是在极少数情况下发生的,即使没有宏。

我将宏移植到以前版本的工作簿中,并且一切正常。