2008-12-11 63 views
2

我在Excel 2003中使用VBA來應用驗證,以將驗證應用到命名列表中的給定範圍的單元格。用戶然後可以從下拉列表中選擇值。在Excel中從命名列表中區分大小寫的驗證

編輯:這就是我如何設置驗證,因爲所謂的「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驗證區分大小寫?

謝謝。

+0

您可以舉一個關於如何執行驗證的例子嗎? – Treb 2008-12-11 17:20:31

+0

我使用VBA根據命名範圍分配驗證 - 請參閱上面問題中的編輯。驗證本身工作正常,但不區分大小寫。 – 2008-12-11 18:30:52

回答

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 
+0

這應該適用於小的驗證要求,但可能不適用於本工作手冊中必須執行的大量驗證。我會給它一個鏡頭,讓你知道。謝謝! – 2008-12-11 21:30:44

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 
相關問題