我有一个Excel 2016文件,我试图在其中基于另一个单元格值锁定和解锁单元格,该单元格正在运行索引匹配公式,因为该公式根据选择的下拉列表而变化。
因此,如果J13显示“正在接受”,则D13:G13未被锁定并且无法编辑。
如果显示“拒绝”,则D13:G13被锁定。
J13是一个索引匹配公式,因为它正在表中查找,以根据用户选择的下拉选项获得拒绝和接受更改的收集日期。
答案 0 :(得分:0)
您需要在需要监视的工作表中添加以下代码。下面的代码将检查每次选择更改时单元格中的文本是否为“接受”。如果条件通过,它将锁定上述范围。使用适当的密码保护和取消保护您的工作表。
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