如果fx A1是下拉列表并且您选择“Nothing”,那么B1应该变为空白并且应该限制输入。如果A1不是“Nothing”,那么B1应该包含一个下拉列表。
我尝试过使用数据验证,但我似乎无法完全按照自己的意愿去做。
提前致谢!
您可以将下面的代码粘贴到您有两个下拉列表的工作表的代码表中。它将采取以下行动。
Const ControlCell As String = "A1" ' address of dropdown A
Const TargetCell As String = "B1" ' address of dropdown B
Const KeyWord As String = "nothing"
Private Sub Worksheet_Change(ByVal Target As Range)'201年1月3日
With Target
If .Address = Range(ControlCell).Address Then
If StrComp(.Value, KeyWord, vbTextCompare) = 0 Then
Application.EnableEvents = False
Range(TargetCell).ClearContents
Application.EnableEvents = True
End If
End If
End With
结束子
Private Sub Worksheet_SelectionChange(ByVal Target As Range)'201年1月3日
With Target
If .Address = Range(TargetCell).Address Then
If StrComp(Range(ControlCell).Value, KeyWord, vbTextCompare) = 0 Then
Application.EnableEvents = False
Range(ControlCell).Select
Application.EnableEvents = True
End If
End If
End With
结束子因此,实际上,B1中的下拉列表不会被删除。它只是看不见而且无法进入。
在范围内键入您的下拉列表值并命名它,比方说MyList。然后使用名称管理器创建另一个名称,比如RestrictIfNothing。在RefersTo窗口中键入公式:
=IF(Sheet1!$A$1="Nothing", "", MyList)
请记住,地址必须是表格的名称。如果要复制带有验证的单元格,请考虑删除$$。为清楚起见,请参见图片:
然后在您的单元格上设置验证,选择列表并且= RestrictIve Nothing。名称区分大小写,请记住大小写。
要清除B1单元格,请将以下代码粘贴到工作表中(右键单击选项卡并选择“查看代码”)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
If UCase(Target) = "NOTHING" Then Target.Offset(, 1) = ""
End Sub