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

看板Office作者 (wooddeer)時間7年前 (2018/11/07 02:51), 編輯推噓0(0032)
留言32則, 3人參與, 7年前最新討論串1/1
軟體: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

11/07 07:50, 7年前 , 1F
變數=key方面判斷,寫入應為布林值
11/07 07:50, 1F

11/07 07:51, 7年前 , 2F
可在另一個程序內以 for each ws in worksheets:
11/07 07:51, 2F

11/07 07:51, 7年前 , 3F
ws.unprotect false..next的方式解鎖試試試
11/07 07:51, 3F

11/07 08:00, 7年前 , 4F
如果手動輸入的話 FALSE (大寫)
11/07 08:00, 4F

11/07 14:40, 7年前 , 5F
手動輸入大寫FALSE已可成功解鎖,感謝soy大大指點!
11/07 14:40, 5F

11/07 14:41, 7年前 , 6F
另外想再請教,使用=key的話,無論後面寫了甚麼,
11/07 14:41, 6F

11/07 14:42, 7年前 , 7F
都會被系統判斷為FALSE嗎?
11/07 14:42, 7F

11/07 14:43, 7年前 , 8F
原本以為布林值要設定為true/false才會作用
11/07 14:43, 8F

11/07 14:56, 7年前 , 9F
後面寫什麼是指,worksheet.unportect,password後面的參
11/07 14:56, 9F

11/07 14:57, 7年前 , 10F
數嗎?
11/07 14:57, 10F

11/07 15:00, 7年前 , 11F
如果是要問後面的參數,判斷上是否為false的話,可google
11/07 15:00, 11F

11/07 15:01, 7年前 , 12F
worksheet.unprotect會有預設值,如DrawingObjects、
11/07 15:01, 12F

11/07 15:02, 7年前 , 13F
Contents、Scenarios會預設為true,其他有些是false
11/07 15:02, 13F

11/07 16:38, 7年前 , 14F
原本password:=key,key會是使用時所設定的密碼
11/07 16:38, 14F

11/07 16:39, 7年前 , 15F
但如果寫成password=key,就無法使用設定的密碼
11/07 16:39, 15F

11/07 16:39, 7年前 , 16F
必須輸入soy大前面說的,輸入大寫FALSE才可解鎖
11/07 16:39, 16F

11/07 16:41, 7年前 , 17F
想請問的部分是,如果編寫password= 的話
11/07 16:41, 17F

11/07 16:41, 7年前 , 18F
是否手動解鎖時都是輸入大寫FALSE呢?
11/07 16:41, 18F

11/07 16:43, 7年前 , 19F
worksheet.protect包含的其他屬性設定有上網查資料
11/07 16:43, 19F

11/07 16:43, 7年前 , 20F
誠如soy大所說,有些預設是true有些是false
11/07 16:43, 20F

11/07 16:45, 7年前 , 21F
小弟不解的地方是,password=key而非password=false
11/07 16:45, 21F

11/07 16:45, 7年前 , 22F
卻為什麼手動解鎖時要輸入FALSE能解鎖呢?
11/07 16:45, 22F

11/07 16:49, 7年前 , 23F
因為Password:=key是把key值assign給Password
11/07 16:49, 23F

11/07 16:49, 7年前 , 24F
而password=key是比較password和key是否相等,回傳布林值
11/07 16:49, 24F

11/07 16:50, 7年前 , 25F
初始並沒有預設Password,因此Password=key回傳FALSE
11/07 16:50, 25F

11/07 16:51, 7年前 , 26F
也就是說ws.protect第一個參數是FALSE
11/07 16:51, 26F

11/07 16:53, 7年前 , 27F
其實也可以單純使用ws.protect key來上鎖
11/07 16:53, 27F

11/07 17:33, 7年前 , 28F
是否手動解鎖時都是輸入大寫FALSE呢?不一定,當inputbox
11/07 17:33, 28F

11/07 17:33, 7年前 , 29F
無輸入資料或取消時,則是TRUE
11/07 17:33, 29F

11/07 17:38, 7年前 , 30F
password=key,這裡的password是一個變數和key一樣,這兩
11/07 17:38, 30F

11/07 17:38, 7年前 , 31F
個變數看是否相等
11/07 17:38, 31F

11/07 17:42, 7年前 , 32F
感謝new大及soy大的詳盡解說,終於弄懂了,感謝!
11/07 17:42, 32F
文章代碼(AID): #1RuUBDkX (Office)
文章代碼(AID): #1RuUBDkX (Office)