作者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/cn.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