基于其他单元格锁定和解锁单元格



我有一个Excel 2016文件,我试图根据另一个单元格值锁定和解锁单元格,该值正在运行索引匹配公式,因为它会根据所选的下拉列表而变化。

因此,如果J13显示"接受",则D13:G13不被锁定,无法编辑。

如果显示"拒绝",则D13:G13被锁定。

J13是一个索引匹配公式,因为它是根据用户选择的下拉选项在表中查找拒绝和接受的收集日期。

您需要在需要监控的工作表中添加以下代码。下面的代码将在每次选择更改时检查单元格中的文本是否为"接受"。如果条件通过,则会锁定上述范围。使用适当的密码来保护和取消保护工作表。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Unprotect Password:="pass"
Call lockAllCellsInSheet(ActiveSheet.Name)
If Range("J13").Text = "Accepting" Then
ActiveSheet.Range("D13:G13").Locked = True
Else
ActiveSheet.Range("D13:G13").Locked = False
End If
ActiveSheet.Protect Password:="pass"
End Sub

这是一个用于锁定所有单元格的通用代码。或者,您可以将所有单元格锁定为默认单元格,并删除下面的代码块以及上面代码中的函数调用。

Sub lockAllCellsInSheet(SheetName As String)
lastCol = Sheets(SheetName).Range("a1").End(xlToRight).Column
Lastrow = Sheets(SheetName).Cells(1, 1).End(xlDown).Row
Sheets(SheetName).Range("A1", Sheets(SheetName).Cells(Lastrow, lastCol)).Locked = False
End Sub

如果您只想监控特定范围,请在选择更改代码中添加以下代码

Dim KeyCells As Range
Set KeyCells = Range("A1:B13") 'Range to be monitored
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
MsgBox "Cell " & Target.Address & " has changed."
End If

最新更新