Excel VBA:锁定单元格而不保护工作簿

Excel VBA:锁定单元格而不保护工作簿,excel,vba,Excel,Vba,我创建了一个外接程序,它从数据库中发送和检索数据,以便我们的分析师使用这些数据。 为了防止对现有数据点进行更改,我想锁定包含此数据的单元格。最初,我通过锁定数据范围和保护工作簿来实现这一点,因为否则锁定将不起作用。但是,保护工作簿也会删除/限制最终用户的许多功能,例如创建图形、自动填充功能、更改格式等。由于最终用户需要这些功能和其他功能,我无法保护工作簿。不过,我还是想锁定包含数据点的单元格 所以我的问题是,是否可以在不保护工作簿的情况下将单元格锁定在动态范围内(我有宏检测数据点的正确结束列和结

我创建了一个外接程序,它从数据库中发送和检索数据,以便我们的分析师使用这些数据。 为了防止对现有数据点进行更改,我想锁定包含此数据的单元格。最初,我通过锁定数据范围和保护工作簿来实现这一点,因为否则锁定将不起作用。但是,保护工作簿也会删除/限制最终用户的许多功能,例如创建图形、自动填充功能、更改格式等。由于最终用户需要这些功能和其他功能,我无法保护工作簿。不过,我还是想锁定包含数据点的单元格

所以我的问题是,是否可以在不保护工作簿的情况下将单元格锁定在动态范围内(我有宏检测数据点的正确结束列和结束行)?如果是,怎么做?如果不允许,是否可以检测动态范围中的更改,并显示一个消息框,说明此特定单元格/范围中不允许更改,并恢复为单元格的旧值?如果是,怎么做

我曾看到一些帖子问过类似的问题,但这些问题要么没有得到回答,要么答案不符合我的情况(例如,在工作簿的VBA项目中实现的宏,而不是加载项的VBA项目)

提前感谢您的回答

亲切问候,,
您不必保护
工作簿
,只需保护
工作表

要通过VBA保护/取消保护工作表,请使用工作表方法
protect
resp<代码>取消保护(您可以应用密码)

要防止修改范围,必须将其
锁定
-属性设置为True并保护工作表(默认情况下,所有单元格都设置了属性
锁定

请注意,如果某个范围被锁定且工作表受到保护,则无法通过VBA修改该范围。如果您想这样做,请使用代码顶部的unprotect方法(但完成后不要忘记再次保护工作表)。或者,您可以使用参数
UserInterfaceOnly:=True
调用
protect
,但不幸的是,Excel没有保存此属性。因此,如果将Excel文件保存在工作表受
UserInterfaceOnly:=True
保护的位置,然后重新打开它,则该工作表也会受到VBA的保护。

使用

ActiveSheet.Cells.Locked=False
然后使用以下方法锁定不希望编辑的范围:

Range("A1:A4").Cells.Locked=True
然后保护床单

ActiveSheet.Protect Contents:=True, DrawingObjects:=False

这只会保护已锁定的内容,并且仍然允许您更改工作表其余部分的值和插入/删除图表。您可能需要使用“保护”更改额外设置

这似乎解决了我在锁定和保护方面遇到的几乎所有问题!除了一个,它可以使用Home->Fill->Series/Justify等。如果我是正确的,这不是保护功能的额外设置,那么我应该如何使此功能可供最终用户使用?@robbertvdh:如果您的功能非常具体,您可以创建VBA代码来覆盖您的情况,并锁定工作表
UserInterfaceOnly