[英]Code to systematically lock excel sheets, only working on 1 spreadsheet (VB)
我基本上是試圖在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
當Excel中已經內置了代碼時,為什么還要編寫代碼來做到這一點(請參閱“保護表”)? 重新發明輪子通常不是一個好主意,為了安全起見,這是雙重的,三倍,因此當您用容易發現的密碼對密碼進行硬編碼時。
但是要回答您的核心問題。 ActiveSheet僅引用頂部的工作表,而不是您調用的每個工作表。
您將需要選擇工作表,然后對其進行密碼保護。 選擇功能更改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
據我所知,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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.