看板 Office 關於我們 聯絡資訊
軟體: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預設的嗎? 要輸入甚麼才能解鎖呢? 希望版上前輩大大能指點迷津! 感激感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 131.147.175.48 ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1541530317.A.BA1.html
soyoso: 變數=key方面判斷,寫入應為布林值 11/07 07:50
soyoso: 可在另一個程序內以 for each ws in worksheets: 11/07 07:51
soyoso: ws.unprotect false..next的方式解鎖試試試 11/07 07:51
soyoso: 如果手動輸入的話 FALSE (大寫) 11/07 08:00
twtpcsilence: 手動輸入大寫FALSE已可成功解鎖,感謝soy大大指點! 11/07 14:40
twtpcsilence: 另外想再請教,使用=key的話,無論後面寫了甚麼, 11/07 14:41
twtpcsilence: 都會被系統判斷為FALSE嗎? 11/07 14:42
twtpcsilence: 原本以為布林值要設定為true/false才會作用 11/07 14:43
soyoso: 後面寫什麼是指,worksheet.unportect,password後面的參 11/07 14:56
soyoso: 數嗎? 11/07 14:57
soyoso: 如果是要問後面的參數,判斷上是否為false的話,可google 11/07 15:00
soyoso: worksheet.unprotect會有預設值,如DrawingObjects、 11/07 15:01
soyoso: Contents、Scenarios會預設為true,其他有些是false 11/07 15:02
twtpcsilence: 原本password:=key,key會是使用時所設定的密碼 11/07 16:38
twtpcsilence: 但如果寫成password=key,就無法使用設定的密碼 11/07 16:39
twtpcsilence: 必須輸入soy大前面說的,輸入大寫FALSE才可解鎖 11/07 16:39
twtpcsilence: 想請問的部分是,如果編寫password= 的話 11/07 16:41
twtpcsilence: 是否手動解鎖時都是輸入大寫FALSE呢? 11/07 16:41
twtpcsilence: worksheet.protect包含的其他屬性設定有上網查資料 11/07 16:43
twtpcsilence: 誠如soy大所說,有些預設是true有些是false 11/07 16:43
twtpcsilence: 小弟不解的地方是,password=key而非password=false 11/07 16:45
twtpcsilence: 卻為什麼手動解鎖時要輸入FALSE能解鎖呢? 11/07 16:45
newacc: 因為Password:=key是把key值assign給Password 11/07 16:49
newacc: 而password=key是比較password和key是否相等,回傳布林值 11/07 16:49
newacc: 初始並沒有預設Password,因此Password=key回傳FALSE 11/07 16:50
newacc: 也就是說ws.protect第一個參數是FALSE 11/07 16:51
newacc: 其實也可以單純使用ws.protect key來上鎖 11/07 16:53
soyoso: 是否手動解鎖時都是輸入大寫FALSE呢?不一定,當inputbox 11/07 17:33
soyoso: 無輸入資料或取消時,則是TRUE 11/07 17:33
soyoso: password=key,這裡的password是一個變數和key一樣,這兩 11/07 17:38
soyoso: 個變數看是否相等 11/07 17:38
twtpcsilence: 感謝new大及soy大的詳盡解說,終於弄懂了,感謝! 11/07 17:42