为了账号安全,请及时绑定邮箱和手机立即绑定

保护Excel中的单元格,但允许通过VBA脚本对其进行修改

保护Excel中的单元格,但允许通过VBA脚本对其进行修改

慕码人2483693 2019-10-28 14:58:56
我正在使用Excel,其中允许用户输入某些字段,而其他单元格则受到保护。我使用过“工具保护”工作表,但是执行此操作后,我无法更改VBA脚本中的值。我需要限制工作表以停止用户输入,同时允许VBA代码根据某些计算来更改单元格值。
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

尝试使用


Worksheet.Protect "Password", UserInterfaceOnly := True

如果UserInterfaceOnly参数设置为true,则VBA代码可以修改受保护的单元格。


查看完整回答
反对 回复 2019-10-28
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

您可以通过执行以下操作通过代码修改工作表


解除保护

修改

保护

在代码中,这将是:


Sub UnProtect_Modify_Protect()


  ThisWorkbook.Worksheets("Sheet1").Unprotect Password:="Password"

'Unprotect


  ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed"

'Modify


  ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password"

'Protect


End Sub

此方法的弱点是,如果代码被中断并且错误处理无法捕获它,则工作表可能会处于未保护状态。


通过执行以下操作可以改进代码


重新保护

修改

执行此操作的代码为:


Sub Re-Protect_Modify()


ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _

 UserInterfaceOnly:=True

'Protect, even if already protected


  ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed"

'Modify


End Sub

这段代码在工作表上更新了保护,但是'UserInterfaceOnly'设置为true。这样,即使执行被中断,VBA代码也可以修改工作表,同时保护工作表不受用户通过UI的输入的影响。


关闭并重新打开工作簿时,此设置将丢失。工作表保护仍然保持。


因此,在尝试修改工作表的任何过程的开始处都需要包含“重新保护”代码,或者在打开工作簿时仅运行一次即可。


查看完整回答
反对 回复 2019-10-28
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

您可以执行基本相同的操作-您可以在需要进行更改之前取消保护VBA中的工作表:


wksht.Unprotect()

并在完成后重新保护它:


wksht.Protect()

编辑:看起来这种解决方法可能已经解决了Dheer的紧迫问题,但是对于以后遇到此问题/答案的任何人,我对答案的第一部分都是错误的,正如Joe指出的那样。您可以保护工作表只能由VBA进行编辑,但是看起来“ UserInterfaceOnly”选项只能在代码中调用“ Worksheet.Protect”时设置。


查看完整回答
反对 回复 2019-10-28
  • 3 回答
  • 0 关注
  • 1691 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信