猿问

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

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



慕码人2483693
浏览 1692回答 3
3回答

守着星空守着你

尝试使用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"'ProtectEnd Sub此方法的弱点是,如果代码被中断并且错误处理无法捕获它,则工作表可能会处于未保护状态。通过执行以下操作可以改进代码重新保护修改执行此操作的代码为:Sub Re-Protect_Modify()ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _ UserInterfaceOnly:=True'Protect, even if already protected  ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed"'ModifyEnd Sub这段代码在工作表上更新了保护,但是'UserInterfaceOnly'设置为true。这样,即使执行被中断,VBA代码也可以修改工作表,同时保护工作表不受用户通过UI的输入的影响。关闭并重新打开工作簿时,此设置将丢失。工作表保护仍然保持。因此,在尝试修改工作表的任何过程的开始处都需要包含“重新保护”代码,或者在打开工作簿时仅运行一次即可。

德玛西亚99

您可以执行基本相同的操作-您可以在需要进行更改之前取消保护VBA中的工作表:wksht.Unprotect()并在完成后重新保护它:wksht.Protect()编辑:看起来这种解决方法可能已经解决了Dheer的紧迫问题,但是对于以后遇到此问题/答案的任何人,我对答案的第一部分都是错误的,正如Joe指出的那样。您可以保护工作表只能由VBA进行编辑,但是看起来“ UserInterfaceOnly”选项只能在代码中调用“ Worksheet.Protect”时设置。
随时随地看视频慕课网APP
我要回答