Проверка чувствительности к регистру в Excel из именованного списка - PullRequest
2 голосов
/ 11 декабря 2008

Я использую VBA в Excel 2003, чтобы применить проверку для применения проверки к заданному диапазону ячеек из именованного списка. Пользователь может затем выбрать из выпадающего списка значений.

Редактировать: вот как я устанавливаю валидацию, учитывая именованный диапазон с именем '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

Все это прекрасно работает, но проблема в том, что когда проверка применяется из именованного списка, она не учитывает регистр. То есть если в раскрывающемся списке выбрано «Джон Смит», пользователь может ввести «проверенный» или «Джон Смит» в проверенную ячейку, и Excel все равно будет обрабатывать его как допустимую запись.

Я знаю, что создание списка вручную с помощью Tools -> Validation ... сделает проверку проверки чувствительной к регистру, но в моем случае это просто невозможно - мне нужно заполнить именованные списки и назначить проверку программно. 1008 *

Кто-нибудь знает способ обеспечить, чтобы проверка Excel на основе именованных списков учитывала регистр?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 12 декабря 2008

Посмотрите на это:

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

Я не проверял это, и это немного сложнее, но я думаю, что он будет делать то, что вы хотите.

2 голосов
/ 11 декабря 2008

Ну, вы могли бы просто построить список проверки, учитывая диапазон проверки (если он не слишком большой)

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 голос
/ 12 декабря 2008

Как насчет StrComp? Сравнение строк в StrComp чувствительно к регистру, если вы используете vbBinaryCompare. Например:

   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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...