我是vba的菜鸟(OTJ训练有素的“程序员”,如果你能用这个术语解说的话),但是我一直在使用Stack Overflow回答我的许多问题。我有一个有趣的事情发生在一个宏,在工作簿打开时自动启动。我将所有页面设置为具有密码,并且只能访问未阻止的单元格。代码似乎不会将单元格选择限制为除工作簿打开的页面之外的任何页面。此外,当它限制细胞选择时,我知道当前活动细胞的任何视觉指示,除了在名称框中找到的(即细胞没有以任何方式勾画)。如果有人有任何建议,我在下面添加了我的代码。非常感谢你!
(使用Excel 2010,在32位,Windows-7机器上)
=================================
Sub Auto_Open()
'
' PasswordReset Macro
' Resets the password for all worksheets to "physic$"
'
' Keyboard Shortcut: Ctrl+Shift+L
'
Dim wsh As Worksheet
For Each wsh In Worksheets(Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "Baselines"))
'wsh.Unprotect Password:="physic$"
wsh.Protect Password:="physic$", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True
wsh.EnableOutlining = True
wsh.EnableSelection = xlUnlockedCells
Next wsh
End Sub
答案 0 :(得分:0)
上面的代码对我有用,同时保持单元格轮廓。您可能想尝试在循环中的每个工作表上选择一个单元格。
wsh.range("A1").select
答案 1 :(得分:0)
这似乎是一个“错误”。
单步执行代码,我发现我可以在不包含未锁定单元格的工作表被复制的情况下复制行为 - 即如果所有工作表都有一些单元解锁,除了“May”,则表单上的单元格轮廓为“1月”当“May”表被设置为受保护时,它将消失。
我还发现只需更改到另一个应用程序并切换回Excel即可解决问题。甚至在表格之间切换也可以修复它。而这一观察使我有了一个潜在的解决方法。
以下修改后的代码版本将记录在宏开始时哪个工作表处于活动状态,在宏循环时激活每个工作表,然后在最后激活原始工作表。
Sub Auto_Open()
'
' PasswordReset Macro
' Resets the password for all worksheets to "physic$"
'
' Keyboard Shortcut: Ctrl+Shift+L
'
Dim wsh As Worksheet
Dim wsh0 As Worksheet
Set wsh0 = ActiveSheet
For Each wsh In Worksheets(Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "Baselines"))
wsh.Activate
'wsh.Unprotect Password:="physic$"
wsh.Protect Password:="physic$", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True
wsh.EnableOutlining = True
wsh.EnableSelection = xlUnlockedCells
Next wsh
wsh0.Activate
End Sub