系统锁定excel工作表的代码,仅处理1个电子表格(VB)
我基本上是在excel中系统地锁定除一张工作表之外的所有工作表。我已经开发了下面的代码,但是,它似乎只锁定了许多表中的1个表Dec。任何帮助都将不胜感激。谢谢系统锁定excel工作表的代码,仅处理1个电子表格(VB),excel,vba,Excel,Vba,我基本上是在excel中系统地锁定除一张工作表之外的所有工作表。我已经开发了下面的代码,但是,它似乎只锁定了许多表中的1个表Dec。任何帮助都将不胜感激。谢谢 Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim ws As Worksheet Dim strPassWord As String strPassWord = "apple" Sheets("Jan").Select Sheets("Feb").Select S
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
既然已经内置到Excel中,为什么还要编写代码来执行此操作?请参见“保护工作表”?重新发明轮子通常不是一个好主意,安全性加倍,当你硬编码密码时,密码很容易被发现
但要回答你的核心问题。ActiveSheet仅指顶部的工作表,而不是所有您调用select on的工作表。您需要选择工作表,然后对其进行密码保护。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
据我所知,ActiveSheet不能以这种方式使用。根据文件: 激活的板材位于顶部的板材上;如果没有工作表处于活动状态,则在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
因为用户必须记住重新保护纸张等。。。解锁后。很可能他们必须编辑每个工作表,这意味着解锁所有工作表,然后分别重新保护所有工作表,这是一个真正的难题。如果在打开文件时自动取消工作表的保护,那么保护工作表有什么意义呢?你就是那个人!工作完美,正是我想要的。非常感谢!