2015-07-24 2 views
4

Я установил словарь как объект, добавив несколько элементов в этот словарь, однако, похоже, он чувствителен к регистру. В любом случае, я могу установить словарь для распознавания разных версий?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 и "Фил" Фил и т.д.

Спасибо заранее!

+2

Вы можете добавить и сравнить элементы с помощью lcase() https://msdn.microsoft.com/en-us/library/office/gg264497.aspx – Roland

+7

Добавьте строку после создания объекта scripting.dictionary, например 'Dict .CompareMode = vbTextCompare'. См. [Свойство CompareMode] (https://msdn.microsoft.com/en-us/library/aa242874 (v = vs.60) .aspx). – Jeeped

+0

Вам следует попробовать метод @ Jeeped. –

ответ

0

Добавление на @Ralph

dict.CompareMode = TextCompare

Это то, что я изменил файл.

4

Мне всегда нравилось задавать вопросы для всего моего кодирования. Таким образом, все модули и код, лежащие на моих листах или в формах, начинаются со следующих трех строк перед написанием любого дополнительного кода.

Option Base 0 
Option Explicit 
Option Compare Text 

Если я хочу что-то обрабатывается по-разному в той или иной Sub по какой-то причине, то я делаю это только в данном конкретном sub и сделать, как это предлагается в комментарии выше (пример):

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

«Параметр Compare Text» не влияет на объекты «Словарь». По умолчанию они всегда будут выполнять сравнения по двоичным/случайным критериям. – Bond

+0

@ Бонд: Я этого не знал. Спасибо, что поделился. Хорошо знать. – Ralph