如何在Excel中保护单元格,但允许VBA脚本修改这些单元格?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (256)

我使用Excel,其中某些字段允许用户输入,而其他单元格将受到保护。我已经使用了工具保护表,但是在这样做之后,我无法更改VBA脚本中的值。我需要限制工作表以停止用户输入,同时允许VBA代码根据某些计算来更改单元格值。

提问于
用户回答回答于

试着使用

Worksheet.Protect "Password", UserInterfaceOnly := True

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

用户回答回答于

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

  • 不保护
  • 修改
  • 保护

在代码中,这将是:

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输入的影响,即使执行被中断。

此设置是失物当工作簿关闭并重新打开时。工作表保护仍在维护中。

因此,“重新保护”代码需要包含在任何试图修改工作表或打开工作簿时只运行一次的过程的开头。

扫码关注云+社区