VBA: получить значение из словаря - PullRequest
1 голос
/ 23 мая 2019

Я пытался использовать словари в VBA.Microsoft Scripting Runtime активирован, и мне удалось заполнить его данными, которые я хочу (цикл For Each показывает мне столько же).Но тогда я больше ничего не получил

Sub Report2()

    Dim wbAggr As Workbook, wbMonat As Workbook
    Dim wsAggr As Worksheet
    Dim iRow As Long, lRowAggr As Long
    Dim dict As Scripting.Dictionary
    Dim key As Variant


    Set dict = New Scripting.Dictionary
    Set wbAggr = ThisWorkbook
    Set wsAggr = ThisWorkbook.Sheets(1)

    lRowAggr = wsAggr.Cells(Rows.Count, 1).End(xlUp).Row

    For iRow = 2 To lRowAggr
        dict.Add wsAggr.Cells(iRow, "K"), iRow
    Next iRow


    For Each key In dict.Keys  '-> returns 2500 key+item pairs
        Debug.Print key, dict(key)
    Next key

    Debug.Print "dict.Keys(20): " & dict.Keys(20)
    Debug.Print "dict.Items(20): " & dict.Items(20)
    Debug.Print "dict.Exists('101010074'): " & dict.Exists("101010074")
    Debug.Print "dict.Exists(101010074): " & dict.Exists(101010074)
    Debug.Print "dict('101010074'): " & dict("101010074")
    Debug.Print "dict(101010074): " & dict(101010074)
    Debug.Print "VarType(dict.Keys(20)): " & VarType(dict.Keys(20))
End Sub

Вывод для операторов Debug.Print:

  • dict.Keys (20): 101010074
  • dict.Items (20): 22 * ​​1011 *
  • dict.Exists ('101010074'): False
  • dict.Exists (101010074): False
  • dict ('101010074'):
  • dict (101010074):
  • edit: VarType (dict.Keys (20)): 8 (= строка)

Так что, если я читаю этоверно (вероятно, нет), есть ключ "101010074", но тогда почему dict.Exists("101010074") возвращает False?

Вывод For Each цикла с Debug.Print key, dict(key):

imageDebug.Print key, dict(key)">

1 Ответ

2 голосов
/ 23 мая 2019

При добавлении ключа в словарь устанавливается ключ для объекта Range, а не Value.Вместо этого используйте следующее

For iRow = 2 To lRowAggr
    dict.Add wsAggr.Cells(iRow, "K").Value2, iRow
Next iRow
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...