[算表] VBA 請教執行保護工作表的指令

作者: twtpcsilence (wooddeer)   2018-11-07 02:51:54
軟體:EXCEL
版本:2016
各位前輩大神好,
小弟因整理舊資料而製作一份包含多個工作表的活頁簿,
為了避免切換工作表時不小心誤刪除或誤更改資料內容,
希望用保護工作表的方式將已整理完畢的工作表上鎖,
由於工作表份數約有10+,
一個一個手動上鎖太繁複,
所以寫了一段簡單的VBA程式自動上鎖,程式碼如下:
Sub protect()
Dim key as string
key = InputBox("Enter the password:")
For Each ws In Worksheets: ws.protect Password = key
Next ws
End Sub
上述程序可以執行,
卻無法透過校閱>取消保護工作表>手動方式輸入密碼解鎖,
會顯示密碼錯誤的訊息,
小弟在上網查資料之後已得知上述程式碼須修正為:
For Each ws In Worksheets: ws.protect Password:=key
即可使用手動方式輸入密碼解鎖。
問題:
原版本的程式語法雖然有錯誤但卻仍能執行並且成功上鎖工作表,
請問在這種情況下上鎖之後,
解鎖密碼是EXCEL預設的嗎?
要輸入甚麼才能解鎖呢?
希望版上前輩大大能指點迷津!
感激感謝!
作者: soyoso (我是耀宗)   2018-11-07 07:50:00
變數=key方面判斷,寫入應為布林值可在另一個程序內以 for each ws in worksheets:ws.unprotect false..next的方式解鎖試試試如果手動輸入的話 FALSE (大寫)
作者: twtpcsilence (wooddeer)   2018-11-07 14:40:00
手動輸入大寫FALSE已可成功解鎖,感謝soy大大指點!另外想再請教,使用=key的話,無論後面寫了甚麼,都會被系統判斷為FALSE嗎?原本以為布林值要設定為true/false才會作用
作者: soyoso (我是耀宗)   2018-11-07 14:56:00
後面寫什麼是指,worksheet.unportect,password後面的參數嗎?如果是要問後面的參數,判斷上是否為false的話,可googleworksheet.unprotect會有預設值,如DrawingObjects、Contents、Scenarios會預設為true,其他有些是false
作者: twtpcsilence (wooddeer)   2018-11-07 16:38:00
原本password:=key,key會是使用時所設定的密碼但如果寫成password=key,就無法使用設定的密碼必須輸入soy大前面說的,輸入大寫FALSE才可解鎖想請問的部分是,如果編寫password= 的話是否手動解鎖時都是輸入大寫FALSE呢?worksheet.protect包含的其他屬性設定有上網查資料誠如soy大所說,有些預設是true有些是false小弟不解的地方是,password=key而非password=false卻為什麼手動解鎖時要輸入FALSE能解鎖呢?
作者: newacc (XD)   2018-11-07 16:49:00
因為Password:=key是把key值assign給Password而password=key是比較password和key是否相等,回傳布林值初始並沒有預設Password,因此Password=key回傳FALSE也就是說ws.protect第一個參數是FALSE其實也可以單純使用ws.protect key來上鎖
作者: soyoso (我是耀宗)   2018-11-07 17:33:00
是否手動解鎖時都是輸入大寫FALSE呢?不一定,當inputbox無輸入資料或取消時,則是TRUEpassword=key,這裡的password是一個變數和key一樣,這兩個變數看是否相等
作者: twtpcsilence (wooddeer)   2018-11-07 17:42:00
感謝new大及soy大的詳盡解說,終於弄懂了,感謝!

Links booklink

Contact Us: admin [ a t ] ucptt.com