代码来系统地lockingExcel表格,只能在1个电子表格(VB)

我基本上试图在Excel中系统地locking除了一张表(密码驱动)。 我已经开发了下面的代码,但是,它似乎只locking了许多工作表中的1张(Dec)。 任何帮助将HUGELY赞赏。 谢谢!

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 

据我所知,ActiveSheet不能以这种方式使用。 根据文档:

活动工作表(顶部表单); 如果没有纸张处于活动状态,则为null引用(在Visual Basic中为Nothing)。

它只会locking您select的最后一张。 相反,你最好是这样的代码:

 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 

为什么当它已经内置到Excel中时,您正在编写代码来执行此操作(请参阅“保护工作表”)? 重新发明车轮通常不是一个好主意,因此在安全性方面更是如此,因此当您在代码中对密码进行硬编码时,很容易被发现。

但要回答你的核心问题。 ActiveSheet只能引用最上面的表格,而不是每个你调用的select。

您将需要select表格,然后密码保护它。 selectfunction改变了ActiveSheet。 它不会添加到select。 这最好通过将锁码移到一个函数来完成,然后在select每个表单后调用函数。

解锁表格需要类似的调整。

 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