如何在 VBA 中锁定 Excel 单元格?

Posted

技术标签:

【中文标题】如何在 VBA 中锁定 Excel 单元格?【英文标题】:How to lock Excel cells in VBA? 【发布时间】:2013-06-11 06:56:53 【问题描述】:

我有一个类似于应用程序的 Excel 工作表,带有允许用户“导航”记录的表单控制按钮。 First、Previous、Next 和 Last 在其中一个工作表记录中适当循环,显示我的“表单”工作表中的值。

当用户未处于编辑或添加模式时,我想锁定单元格以防止用户修改内容。

我尝试了 Range("A1:O24").Locked = True,但我仍然能够在单元格中输入新值。

有谁知道如何做到这一点?我需要我的 vba 代码能够在用户“导航”时为单元格分配新值,但要防止用户输入新值,除非在添加或编辑模式下。

【问题讨论】:

你见过this吗?在 VBA 解决方案中有一个注释掉的 'ws.Protect userinterfaceonly:=True,它几乎锁定了用户界面,但仍然允许您从 VBA 子程序中编辑单元格。 @mehow:不过是一个小小的警告——UserInterfaceOnly 属性没有与文件一起保存!因此,当您打开文件时,任何宏都会遇到问题 - 除非您使用 Open 事件重新设置属性! 【参考方案1】:

我认为这样做的原因是您需要在单元格实际被锁定之前保护工作表。默认情况下,所有单元格都设置为锁定格式,因此您真正想要做的是将不想锁定的范围设置为 Range().Locked = False,然后将工作表设置为受保护。

如果您希望锁定所有单元格,您只需将工作表设置为受保护

【讨论】:

我明白你在用 .Protect 说什么了。然而,这似乎不适用于我的情况:/保护(或“锁定”)单元格可防止我的 vba 代码在用户循环浏览记录时更改单元格值。我需要防止用户在不处于添加/编辑状态的情况下修改单元格值,但允许我的代码在单击表单控制按钮并运行它们的事件时更改值。【参考方案2】:

搜索您的条件,无论用户是否处于编辑或添加模式,然后锁定您的范围并最终保护您的工作表。

假设在一种情况下,如果您想锁定从 A1 到 I50 范围内的单元格,那么下面是代码:

Worksheets("Enter your sheet name").Range("A1:I50").Locked = True
ActiveSheet.Protect Password:="Enter your Password"

在另一种情况下,如果您已经拥有受保护的工作表,请按照以下代码操作:

ActiveSheet.Unprotect Password:="Enter your Password"
Worksheets("Enter your sheet name").Range("A1:I50").Locked = True
ActiveSheet.Protect Password:="Enter your Password"

【讨论】:

以上是关于如何在 VBA 中锁定 Excel 单元格?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VBA 中锁定 Excel 单元格?

excel中使用vba如何能够实现如果我这个单元格里的内容是1则另一个单元格锁定,不允许修改,

excelvba锁定单元格图片不被删除

如何用VBA语句让EXCEL里某单元格不能被输入或更改?(比如说要让A1单元格不被输入)请诸路VBA高手赐教,谢谢!!

求EXCEL VBA代码。单元格输入内容保存后自动锁定有内容单元格。下次打开后不可编辑。

在excel里利用vba怎么对指定单元格,或区域单元格保护