簡體   English   中英

不區分大小寫的字典

[英]Case in-sensitive dictionary

我已將字典設置為一個對象,並向該字典添加了幾個項目,但它似乎區分大小寫。 無論如何我可以設置字典來識別不同的版本嗎?

我的代碼:

Sub Test()

Dim sheet1 As String
Dim Dict As Object
Dim c As Range

Sheet1= "TEST"
Set Dict = CreateObject("Scripting.Dictionary")

Dict.Add "MIKE", 0
Dict.Add "PHIL", 0
Dict.Add "Joe", 0

For Each c In ActiveWorkbook.Worksheets(Sheet1).UsedRange
If Dict.Exists(ActiveWorkbook.Worksheets(Sheet1).Cells(c.Row, c.Column).Value) Then
        Dict(ActiveWorkbook.Worksheets(Sheet1).Cells(c.Row, c.Column).Value) = Dict(ActiveWorkbook.Worksheets(Sheet1).Cells(c.Row, c.Column).Value) + 1
End If
Next

Sheet1.Cells(25, 3) = Dict("MIKE")
Sheet1.Cells(25, 3) = Dict("PHIL")
Sheet1.Cells(25, 3) = Dict("Joe")

Set Dict = Nothing

End Sub

所以我想識別 MIKE 的“mike”和 PHIL 等的“Phil”。

提前致謝!

添加到@Ralph

dict.CompareMode = TextCompare

是我將文件更改為的內容。


關於評論的一些說明:

TextCompare僅適用於 Early Binding,它是Scripting的成員。
vbTextCompare在 VBA 中始終可用。
兩者都是 = 1。

? Scripting.CompareMethod.TextCompare
 1 
? VBA.VbCompareMethod.vbTextCompare
 1 

注意:如果 dict 為空,您只能設置dict.CompareMode ,即您還沒有添加任何成員。 否則,您將收到“非法過程調用”錯誤。

我總是喜歡為我的所有編碼設置直截了當的東西。 因此,在編寫任何其他代碼之前,我的工作表或表單中的所有模塊和代碼都以以下三行開頭。

Option Base 0
Option Explicit
Option Compare Text

如果由於某種原因我想在特定的Sub以不同的方式處理某些事情,那么我只在這個特定的sub這樣做,並按照上面的評論(示例)中的建議進行操作:

dict.CompareMode = BinaryCompare 'if I need a case-sensitive compare in this sub

在此處輸入圖片說明

由於 VBE 知道dict是一個字典,因此它可以提供自動完成的命題。 這只有通過早期綁定才有可能。 后期綁定 VBE 將不提供任何自動完成命題。 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM