从命名列表中在Excel中进行区分大小写的验证

时间:2008-12-11 17:17:48

标签: excel vba excel-vba

我在Excel 2003中使用VBA来应用验证以将验证应用于来自命名列表的给定范围的单元格。然后,用户可以从下拉列表中选择值。

编辑:给定一个名为'MyLookupList'的命名范围

,这是我设置验证的方式
        With validatedRange.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, Formula1:="=MyLookupList"
            .ErrorMessage = "Invalid value. Select one from the dropdown list."
            .InCellDropdown = True
        End With

一切正常,但问题是当从命名列表应用验证时,它不区分大小写。即如果下拉选项是“John Smith”,则用户可以在经过验证的单元格中键入“john smith”或“john SmiTh”,Excel仍会将其视为有效条目。

我知道通过工具手动创建列表 - >验证...会使查找验证区分大小写,但对于我的情况,这是不可行的 - 我必须填充命名列表并以编程方式分配验证。

有没有人知道确保基于命名列表的Excel验证区分大小写的方法?

感谢。

3 个答案:

答案 0 :(得分:2)

你可以在给定验证范围的情况下构建验证列表(假设它不是太大)

Dim sValidationList As String
Dim iRow As Integer

  'build comma-delimited list based on validation range
  With oValidationRange
    For iRow = 1 To .Rows.Count
      sValidationList = sValidationList & .Cells(iRow, 1) & ","
    Next
  End With

  'trim trailing comma   
  sValidationList = Left(sValidationList, Len(sValidationList) - 1)

  'apply validation to data input range
  With oDataRange.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
      Operator:=xlBetween, Formula1:=sValidationList
    .ErrorMessage = "Invalid value. Select one from the dropdown list."
    .InCellDropdown = True

  End With

答案 1 :(得分:2)

看看这个:

http://www.contextures.com/xlDataVal14.html

我没有测试它,它有点复杂,但我认为它会做你想要的。

答案 2 :(得分:1)

StrComp怎么样?如果使用vbBinaryCompare,则StrComp字符串比较区分大小写。例如:

   Set c = Range("MyLookupList").Find(Range("ValidateRange"), _
         LookIn:=xlValues)
    If Not c Is Nothing Then
        If StrComp(c, Range("ValidateRange"), vbBinaryCompare) = 0 Then
            'Match '
            MsgBox "OK"
        Else
            MsgBox "Problem"
        End If
    End If