我正在尝试在excel中创建一个高级电子表格,以满足那些真正需要被告知确切做什么和不做什么的人。因此,根据A列中的选择,我想按如下方式禁用某些单元格(但只禁用同一行上的单元格):
Number- disable cells D, F, G
Link - disable cells E, F, G
Image - disable cells D, E
任何帮助都非常感谢,我真的不喜欢我的excel / vba技能。
答案 0 :(得分:2)
您可以锁定单元格,使其无法被选中。
Range("A2").Locked = True
但是,这需要您锁定工作表(使用或不使用密码)。
WorkSheets("Sheet1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
WorkSheets("Sheet1").EnableSelection = xlUnlockedCells
因此,当用户点击“主”单元格时,您只需切换锁定的单元格。
为了在用户选择新单元格时进行此更改,您需要挂钩到Selection Change事件(将下面的代码放在工作表模块中)。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
目标是当前选定的单元格。所以现在您可以测试当前选择的单元格,然后根据需要锁定其他单元格。
尽管如此,我建议不要使用UserForm。
编辑2 - 根据评论更新。
这是一个简单的实现
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Dim tRow As Integer
tRow = Target.Row
Worksheets("Sheet1").Unprotect
Dim dLock, eLock, fLock, gLock As Boolean
Range("D" & tRow & ":G" & tRow).Locked = False
Select Case Range("b" & tRow).Value
Case "Number"
dLock = True
fLock = True
gLock = True
Case "Link"
eLock = True
fLock = True
gLock = True
Case "Image"
dLock = True
eLock = True
End Select
Range("d" & tRow).Locked = dLock
Range("e" & tRow).Locked = eLock
Range("f" & tRow).Locked = fLock
Range("g" & tRow).Locked = gLock
Worksheets("Sheet1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Worksheets("Sheet1").EnableSelection = xlUnlockedCells
End If
End Sub