作者twtpcsilence (wooddeer)
看板Office
標題[算表] VBA 請教執行保護工作表的指令
時間Wed Nov 7 02:51:54 2018
軟體: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://webptt.com/m.aspx?n=bbs/Office/M.1541530317.A.BA1.html
1F:→ soyoso: 變數=key方面判斷,寫入應為布林值 11/07 07:50
2F:→ soyoso: 可在另一個程序內以 for each ws in worksheets: 11/07 07:51
3F:→ soyoso: ws.unprotect false..next的方式解鎖試試試 11/07 07:51
4F:→ soyoso: 如果手動輸入的話 FALSE (大寫) 11/07 08:00
5F:→ twtpcsilence: 手動輸入大寫FALSE已可成功解鎖,感謝soy大大指點! 11/07 14:40
6F:→ twtpcsilence: 另外想再請教,使用=key的話,無論後面寫了甚麼, 11/07 14:41
7F:→ twtpcsilence: 都會被系統判斷為FALSE嗎? 11/07 14:42
8F:→ twtpcsilence: 原本以為布林值要設定為true/false才會作用 11/07 14:43
9F:→ soyoso: 後面寫什麼是指,worksheet.unportect,password後面的參 11/07 14:56
10F:→ soyoso: 數嗎? 11/07 14:57
11F:→ soyoso: 如果是要問後面的參數,判斷上是否為false的話,可google 11/07 15:00
12F:→ soyoso: worksheet.unprotect會有預設值,如DrawingObjects、 11/07 15:01
13F:→ soyoso: Contents、Scenarios會預設為true,其他有些是false 11/07 15:02
14F:→ twtpcsilence: 原本password:=key,key會是使用時所設定的密碼 11/07 16:38
15F:→ twtpcsilence: 但如果寫成password=key,就無法使用設定的密碼 11/07 16:39
16F:→ twtpcsilence: 必須輸入soy大前面說的,輸入大寫FALSE才可解鎖 11/07 16:39
17F:→ twtpcsilence: 想請問的部分是,如果編寫password= 的話 11/07 16:41
18F:→ twtpcsilence: 是否手動解鎖時都是輸入大寫FALSE呢? 11/07 16:41
19F:→ twtpcsilence: worksheet.protect包含的其他屬性設定有上網查資料 11/07 16:43
20F:→ twtpcsilence: 誠如soy大所說,有些預設是true有些是false 11/07 16:43
21F:→ twtpcsilence: 小弟不解的地方是,password=key而非password=false 11/07 16:45
22F:→ twtpcsilence: 卻為什麼手動解鎖時要輸入FALSE能解鎖呢? 11/07 16:45
23F:→ newacc: 因為Password:=key是把key值assign給Password 11/07 16:49
24F:→ newacc: 而password=key是比較password和key是否相等,回傳布林值 11/07 16:49
25F:→ newacc: 初始並沒有預設Password,因此Password=key回傳FALSE 11/07 16:50
26F:→ newacc: 也就是說ws.protect第一個參數是FALSE 11/07 16:51
27F:→ newacc: 其實也可以單純使用ws.protect key來上鎖 11/07 16:53
28F:→ soyoso: 是否手動解鎖時都是輸入大寫FALSE呢?不一定,當inputbox 11/07 17:33
29F:→ soyoso: 無輸入資料或取消時,則是TRUE 11/07 17:33
30F:→ soyoso: password=key,這裡的password是一個變數和key一樣,這兩 11/07 17:38
31F:→ soyoso: 個變數看是否相等 11/07 17:38
32F:→ twtpcsilence: 感謝new大及soy大的詳盡解說,終於弄懂了,感謝! 11/07 17:42