2014-10-31 2 views
-1

Объяснение: Я уже нашел ответы на этот вопрос, но они не подходят для моего дела. Я пытаюсь написать решение для Hex To Binary conversion в VBA, но я получаю ошибку, упомянутую в названии. Хотя я не могу найти какой-либо другой ключ, связанный с этим элементом в этой коллекции.Ошибка объекта: Этот ключ уже связан с элементом этой коллекции

Мой КОД:

Public Function HEX2BIN(strHex As String) As String 
    Dim oHexValues As Object 
    Dim valueBin As String 
    Dim l_strHex As Integer 
    Set oHexValues = CreateObject("Scripting.Dictionary") 


    oHexValues.Add 1, "0001" 
    oHexValues.Add 2, "0010" 
    oHexValues.Add 3, "0011" 
    oHexValues.Add 4, "0100" 
    oHexValues.Add 5, "1010" 
    oHexValues.Add 6, "0110" 
    oHexValues.Add 7, "0111" 
    oHexValues.Add 8, "1000" 
    oHexValues.Add 9, "1001" 
    oHexValues.Add A, "1010" 
    oHexValues.Add B, "1011" 
    oHexValues.Add C, "1100" 
    oHexValues.Add D, "1101" 
    oHexValues.Add E, "1110" 
    oHexValues.Add F, "1111" 

valueBin = "" 
l_strHex = Len(strHex) 

For i = 1 To l_strHex 
    charHex = Mid(strHex, i, 1) 
    MsgBox "Chars:" & charHex 
    If oHexValues.Exists(charHex) Then 
     valueBin = valueBin & oHexValues(charHex) 
    ElseIf charHex = "0" Then 
     valueBin = valueBin & "0000" 
    Else 
     MsgBox "Invalid value!" 
    End If 
Next i 
HEX2BIN = valueBin 

End Function 

ОШИБКА:Этот ключ уже связан с элементом этой коллекции. И отладчик указывает на запись:

oHexValues.Add B, "1011" 

Может ли кто-нибудь помочь мне здесь?

+0

Это работает! Глупая ошибка. В моем случае, если я делаю добавление с помощью «А», утверждение IF не распознает ту же букву. Например, 'oHexValues.Exists (A)! = OHexValues.Exists (" A ")' Но я просто завершу '' '' вокруг моего charHex. Еще раз спасибо! –

+6

Похоже, вы не используете 'Option Explicit'. Если бы вы были, то компилятор сказал бы вам, что не было переменной с именем 'A',' B', ... и вы бы быстрее столкнулись с этой проблемой. –

ответ

4

Возможно, вы хотите добавить String"A", а не переменную с именем A? Оберните буквы такими котировками, как

oHexValues.Add "A", "1010"

+0

Удалена ошибка. Но теперь он говорит, что 'oHexValues.Exists (" 4 ")' является ** FALSE **. Что не может быть правдой, так как я добавил «4» в словарь. –

+0

Добавили ли вы «4» или «4»? –

+0

'oHexValues.Add" 4 "," 0100 "' Что я хочу сделать, так это когда я получаю «4» в charHex - я хотел бы заменить его бинарным совпадением, которое представляет собой пару из '" 4 "' в моем объекте -> '' 0100 "' –

Смежные вопросы