如果其他单元格为“Nothing”,则为空单元格并限制输入。否则有下拉列表

问题描述 投票:0回答:2

如果fx A1是下拉列表并且您选择“Nothing”,那么B1应该变为空白并且应该限制输入。如果A1不是“Nothing”,那么B1应该包含一个下拉列表。

我尝试过使用数据验证,但我似乎无法完全按照自己的意愿去做。

提前致谢!

vba excel-vba excel
2个回答
0
投票

您可以将下面的代码粘贴到您有两个下拉列表的工作表的代码表中。它将采取以下行动。

  1. 当A1设置为“Nothing”时,B1将变为空白
  2. 当A1为“Nothing”时选择B1时,选择将跳转到A1 选项明确 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中的下拉列表不会被删除。它只是看不见而且无法进入。


0
投票

在范围内键入您的下拉列表值并命名它,比方说MyList。然后使用名称管理器创建另一个名称,比如RestrictIfNothing。在RefersTo窗口中键入公式:

=IF(Sheet1!$A$1="Nothing", "", MyList)

请记住,地址必须是表格的名称。如果要复制带有验证的单元格,请考虑删除$$。为清楚起见,请参见图片:

enter image description here

然后在您的单元格上设置验证,选择列表并且= 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
© www.soinside.com 2019 - 2024. All rights reserved.