[算表] 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