用VBA条件锁定EXCEL单元格的问题,高手进!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用VBA条件锁定EXCEL单元格的问题,高手进!相关的知识,希望对你有一定的参考价值。

我要实现:当条件区域B2:B10中包含条件A2的内容(123),则锁定对应的C2:C10单元格
我用下面的语句只能判断一个单元格内的条件,而不能判断一段范围内的单元格条件,而且效果是锁定整个C2:C10范围,而我是希望按条件锁定,望高手指点

Private Sub Worksheet_Change(ByVal Target As Range)
If [B2] = 123 Then\******这里的[B2]我该如何表示成B2:B10?这里的123我该如何表示成A2?******\
With ActiveSheet
Application.EnableEvents = False
.Unprotect
.UsedRange.Cells.Locked = False
.Range("C2:C10").Locked = True
.Protect
.EnableSelection = xlUnlockedCells
Application.EnableEvents = True
End With
Else
ActiveSheet.Unprotect
End If
End Sub

以下代码是通过selectionchange事件写的,有点投机取巧,就是当选中C列的单个单元格时判断对应的B列中单元格里的数值是否等于A2中的数值,如果等于则禁止选中C列的单元格。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then
    [a1].Select
Else
    If Target.Column = 3 Then
        If Cells(Target.Row, 2) = [a2] Then
            Cells(Target.Row, 4).Select
        End If
    End If
End If
End Sub

如果要改你那个代码的话可以通过target.address判断改变单元格的地址是否为B2:B10

参考技术A if not [B2:B10].find(123) is nothing then

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

【中文标题】如何在 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里某单元格不能被输入或更改?(比如说要让A1单元格不被输入)请诸路VBA高手赐教,谢谢!!

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

如何使用 vba 在 Excel 2007 中找到条件格式单元格的填充颜色值?

请VBA高手帮忙,我要在EXCEL中插入一个控件,每次只要点击这个控件就能实现下面的功能

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

Excel 如何在VBA中设定单元格的格式为文本