[英]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.