数据验证以获取错误消息(单元格中的输入与列表中的名称不相等)

时间:2019-05-17 20:04:04

标签: excel vba validation excel-formula

我已经查看了一些有关问题的示例,但是找不到有效的答案。

背景: 我在Sheet1(A2:A77,已经是名称为“ Liste”的已定义范围)中列出了项目(比如苹果,橙子,香蕉)。 然后,我在另一个工作表(假设为Sheet2)上包含几个单元格,其中弹出一个用户窗体(使用vba代码创建),用户可以在其中选择一个项目并单击“确定”。

但是,由于用户表单(和列表)的性质,您可能会有拼写错误等,并且仍会被接受。因此,我想创建一个将输入与给定列表匹配的检查(以防止用户输入其他内容)。用户表单/代码旨在保持其可搜索性(而不仅仅是简单的数据验证列表)。

问题: 我尝试使用vba代码创建此代码,该代码检查输入,将其与Sheet1列表匹配,如果不匹配,则显示带有语句的msgbox。这部分起作用(对于某些字母,但对于另一些字母而言,很奇怪)。

这是我的代码:

Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim rSearchRng As Range
Dim vFindvar As Variant

If Not Intersect([B7:B26], Target) Is Nothing Then
    Set rSearchRng = Sheet4.Range("Liste")
    Set vFindvar = rSearchRng.Find(Target.Value)
    If Not vFindvar Is Nothing Then
        MsgBox "The Audit Project Name you have entered is not valid. Please try again!", vbExclamation, "Error!"
        Selection.ClearContents
    End If
End If
Application.EnableEvents = True
End Sub

所以我当时想通过简单的数据验证来创建此错误消息。

数据验证

  • 我尝试了“列表”选项(并使其等于命名范围),但没有执行任何操作(未显示错误框)
  • 我尝试使用以下公式'SUMPRODUCT(-(B12 = Liste)> 0)= TRUE(自定义)尝试了“自定义”(我在帖子中找到了此选项,当我在单元格中尝试使用它时,它对其他人有用预期的“ TRUE / FALSE”结果),但仍然没有显示

更新

如果您没有用户表单,Tigeravatars数据验证建议会起作用(请参见下面的评论)。

要使其与UserForm一起使用,我将“ MatchEntry”更改为TRUE,还从ComboBox代码中删除了所有不需要的“更改事件”。我现在使用的最终代码如下:

Dim a()

Private Sub CommandButton2_Click()

End Sub

Private Sub UserForm_Initialize()
  a = [Liste].Value
  Me.ComboBox1.List = a
End Sub

Private Sub ComboBox1_Change()
  Set d1 = CreateObject("Scripting.Dictionary")
  tmp = UCase(Me.ComboBox1) & "*"
  For Each c In a
    If UCase(c) Like tmp Then d1(c) = ""
  Next c
  Me.ComboBox1.List = d1.keys
  Me.ComboBox1.DropDown
End Sub

Private Sub CommandButton1_Click()
  ActiveCell = Me.ComboBox1
  Unload Me
End Sub
Private Sub cmdClose_Click()
  Unload Me
End Sub

我认为我在这里展示它是为了防止有人偶然发现我的问题。

谢谢!

2 个答案:

答案 0 :(得分:0)

  • 选择要在其中进行数据验证的单元格
  • 选中单元格后,转到“数据”标签->“验证”
  • 将“允许”设置为“列表”,并将源设置为=Liste,如下所示:

Data Validation List screenshot

  • 接下来转到“错误警报”选项卡,并将“样式”设置为“警告”,然后在“标题”和“错误消息”中输入所需的文本,如下所示:

Data Validation Error Alert screenshot

测试一下。现在,您应该有一个有效选择的下拉列表,并且如果尝试手动输入无效选择,则会收到您指定的错误消息。

请注意,如果您希望数据验证完全禁止/阻止列表中没有的任何条目,则需要将错误提示->样式设置为“停止”,而不是“警告”。

编辑

每个注释都不能是下拉列表。我强烈建议为此使用下拉列表,因为这将是减少时间输入数据以及减少错别字错误的最有效方法。但是,如果它绝对不能成为下拉列表,则可以使用“自定义数据验证”并将公式设置为=ISNUMBER(MATCH(B7,Liste,0))(此处使用B7是因为它是范围内的第一个单元格包含此数据验证的单元格。

Data Validation Custom screenshot

答案 1 :(得分:0)

尝试以下公式:

= NOT(ISERROR(FIND(“-”&A1&“-”,(TEXTJOIN(,“-”,TRUE,Sheet1!A1:A77))))))

合并所有文本,然后查看列表中单元格中是否出现内容。我将其放在破折号之间以防止它接受局部。