我基本上试图在excel中系统地锁定一张表(密码驱动)。我已经开发了以下代码,但是,它似乎只锁定了许多工作表中的1张(12月)。任何帮助都会非常感激。谢谢!
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet
Dim strPassWord As String
strPassWord = "apple"
Sheets("Jan").Select
Sheets("Feb").Select
Sheets("Mar").Select
Sheets("April").Select
Sheets("May").Select
Sheets("June").Select
Sheets("July").Select
Sheets("Aug").Select
Sheets("Sept").Select
Sheets("Oct").Select
Sheets("Nov").Select
Sheets("Dec").Select
ActiveSheet.Protect Password:=strPassWord, DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlNoSelection
End Sub
Private Sub Workbook_Open()
Dim ws As Worksheet
Dim strPassWord As String
strPassWord = InputBox(Prompt:="Password", _
Title:="Enter Password", Default:="User Password")
If strPassWord = "apple" Then
Sheets("Jan").Select
Sheets("Feb").Select
Sheets("Mar").Select
Sheets("April").Select
Sheets("May").Select
Sheets("June").Select
Sheets("July").Select
Sheets("Aug").Select
Sheets("Sept").Select
Sheets("Oct").Select
Sheets("Nov").Select
Sheets("Dec").Select
ActiveSheet.Unprotect Password:=strPassWord
Else
MsgBox ("Password Incorrect")
End If
End Sub
答案 0 :(得分:0)
为什么在代码已经内置到Excel中时编写代码(请参阅“保护表”)?重新发明轮子通常不是一个好主意,对安全性来说是双倍的,因为当您在代码中对密码进行硬编码时很容易被发现。
然而,要回答你的核心问题。 ActiveSheet仅指顶部的工作表,而不是您调用的每个工作表。
答案 1 :(得分:0)
您需要选择工作表,然后用密码保护它。 select函数更改ActiveSheet。它不会添加到选择中。这最好通过将锁定代码移动到一个函数,然后在选择每个工作表后调用该函数来实现。
解锁表单需要进行类似的调整。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet
Dim strPassWord As String
strPassWord = "apple"
Sheets("Jan").Select
Call LockSheet
Sheets("Feb").Select
Call LockSheet
Sheets("Mar").Select
Call LockSheet
Sheets("April").Select
Call LockSheet
Sheets("May").Select
Call LockSheet
Sheets("June").Select
Call LockSheet
Sheets("July").Select
Call LockSheet
Sheets("Aug").Select
Call LockSheet
Sheets("Sept").Select
Call LockSheet
Sheets("Oct").Select
Call LockSheet
Sheets("Nov").Select
Call LockSheet
Sheets("Dec").Select
Call LockSheet
End Sub
Private Sub LockSheet
ActiveSheet.Protect Password:=strPassWord, DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlNoSelection
End Sub
答案 2 :(得分:0)
ActiveSheet不能以这种方式使用。根据文件:
活动纸(顶部的纸张);如果没有工作表,则为null引用(在Visual Basic中为Nothing)。
它只会锁定您选择的最后一张纸。相反,你最好使用这样的代码:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet
Dim strPassWord As String
strPassWord = "apple"
Call LockSheet(Sheets("Sheet1"))
Call LockSheet(Sheets("Sheet2"))
Call LockSheet(Sheets("Sheet3"))
End Sub
Private Sub Workbook_Open()
Dim ws As Worksheet
Dim strPassWord As String
strPassWord = InputBox(Prompt:="Password", _
Title:="Enter Password", Default:="User Password")
If strPassWord = "apple" Then
Call UnlockSheet(Sheets("Sheet1"), strPassWord)
Call UnlockSheet(Sheets("Sheet2"), strPassWord)
Call UnlockSheet(Sheets("Sheet3"), strPassWord)
Else
MsgBox ("Password Incorrect")
End If
End Sub
Private Sub LockSheet(sheet As Worksheet)
sheet.Protect password:=strPassWord, DrawingObjects:=True, Contents:=True, Scenarios:=True
sheet.EnableSelection = xlNoSelection
End Sub
Private Sub UnlockSheet(sheet As Worksheet, strPassWord As String)
sheet.Unprotect password:=strPassWord
End Sub