Excel VBA:在不保护工作簿的情况下锁定单元格

4
我创建了一个插件,可以从数据库中发送和检索数据,以便我们的分析师使用这些数据。为了防止对现有数据点进行更改,我想锁定包含此数据的单元格。最初,我通过锁定数据范围并保护工作簿来实现这一点,否则锁定无法生效。然而,保护工作簿也会删除/限制终端用户的许多功能,例如创建图表、自动填充功能、更改格式等。由于这些和其他功能对终端用户是必要的,因此我不能保护工作簿。尽管如此,我仍然想锁定包含数据点的单元格。
所以我的问题是,是否可能在动态范围内锁定单元格(我有宏检测数据点的正确结束列和结束行),而不需要保护工作簿?如果可以,怎样做?如果不行,是否可能检测动态范围中的更改,并显示消息框,指出此特定单元格/范围不允许更改,并恢复单元格的旧值?如果可以,怎么做?
我已经看到一些类似的帖子,但这些要么没有回答,要么回答对我的情况不令人满意(例如,在工作簿的VBA项目中实施的宏,而不是插件的VBA项目中实施)。
感谢您提前的答复!
此致, Robbert
2个回答

2

使用

ActiveSheet.Cells.Locked=False

使用以下方式锁定您不希望被编辑的范围:

Range("A1:A4").Cells.Locked=True

然后保护该表格。
ActiveSheet.Protect Contents:=True, DrawingObjects:=False

这将仅保护被锁定的内容,同时允许您更改工作表中其余部分的值和插入/删除图表。您可能需要使用“保护”功能更改其他设置。 此处可找到更多详细信息


这似乎解决了我在锁定和保护方面遇到的几乎所有问题!除了一个问题,就是能否使用“主页”->“填充”->“系列/对齐”等功能。如果我没记错的话,这不是保护功能的额外设置,那么我应该怎么做才能使这个功能对最终用户可用? - robbertvdh
如果您的功能非常特定,您可以创建VBA代码来覆盖您的情况并锁定工作表“UserInterfaceOnly”。 - AJD

0

你不需要保护Workbook,只需要保护Worksheet

通过VBA保护/取消保护工作表,使用protectunprotect方法(可以应用密码)。

如果要防止修改某个区域,必须将其locked属性设置为True,并保护工作表(所有单元格默认都具有locked属性)。

请注意,如果一个区域被锁定并且工作表受到保护,则无法通过VBA修改该区域。如果要这样做,请在代码顶部使用unprotect方法(但不要忘记在完成后重新保护工作表)。作为替代方案,您可以调用带有参数UserInterfaceOnly:=Trueprotect方法,但不幸的是,Excel不保存此属性。因此,如果保存了一个使用UserInterfaceOnly:=True保护工作表的Excel文件并重新打开它,则该工作表对于VBA也是受保护的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接