繁体   English   中英

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

[英]Excel VBA: Lock cells without protecting the workbook

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

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

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

预先感谢您的回答!

亲切的问候,罗伯特

ActiveSheet.Cells.Locked=False

然后使用以下方法锁定您不想编辑的范围:

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

然后保护床单

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

这只会保护被Locked的内容,并且仍然允许您更改工作表其余部分中的值并插入/删除图表。 您可能需要使用 Protect 更改额外设置。 更多详情可在这找到

您不必保护Workbook ,只需保护Worksheet

保护/不保护经由VBA的片材,使用的工作表的方法protect RESP。 unprotect (您可以应用密码)。

为了防止被修改的范围,你必须设置它的locked -属性为True保护工作表(所有单元的属性格式locked默认值)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM