2014-10-31 33 views
-1

說明: 我擡頭已經對此問題提供了一些答案,但它們不適合我的情況。 我想寫一個十六進制到二進制轉換在VBA的解決方案,但我在標題中提到一個錯誤。雖然我無法在此集合中找到任何與此元素關聯的其他Key。對象錯誤:此密鑰已與此集合中的某個元素相關聯

我的代碼:

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

這一工程!愚蠢的錯誤。就我而言,如果我用「A」添加,IF語句不會識別同一封信。 例如'oHexValues.Exists(A)!= oHexValues.Exists(「A」)' 但是我只是將''「'包裹在我的charHex周圍。再次感謝! – 2014-10-31 10:36:57

+6

看起來你並沒有使用Option Explicit。如果你是,那麼編譯器會告訴你,沒有變量名爲'A','B',...你會更快地發現問題。 – 2014-10-31 10:48:32

回答

4

您是不是想要添加String"A"而不是名爲A的變量?包裹加上引號的字母像

oHexValues.Add "A", "1010"

+0

它刪除了錯誤。但是現在它說'oHexValues.Exists(「4」)'是** FALSE **。這不可能是真的,因爲我在我的詞典中加了「4」。 – 2014-10-31 10:42:20

+0

您是否添加了「4」或「4」? – 2014-10-31 10:47:47

+0

'oHexValues.Add「4」,「0100」' 我想要做的是,當我在charHex中獲得「4」時 - 我想用它的二進制匹配替換它,這是一對在我的對象中的「4」'>「0100」' – 2014-10-31 10:49:33

相關問題