Вы используете ярлык, который не разрешен; Dictionary.Add
реализован так, что он ожидает одну пару ключ / значение и добавляет один элемент в словарь. Если вам нужно добавить несколько элементов, вам нужно несколько вызовов для Dictionary.Add
- нет никакого способа обойти это.
Ярлык, который будет разрешен, хотя будет просто захватывать значения в любом 2-столбце Range
и превратить , что , в словарь, вместо того, чтобы брать любые случайные два массива, которые могут иметь или не иметь одинаковый размер.
Создать функцию, которая принимает 2D массив и превращает его в словарь, обрабатывая первый столбец как уникальные ключи, а второй столбец как значения.
Public Function ToDictionary(ByVal keyValuePairs As Variant) As Scripting.Dictionary
If Not IsArray(keyValuePairs) Then Err.Raise 5
If GetDimensions(keyValuePairs) <> 2 Then Err.Raise 5 'see https://stackoverflow.com/q/6901991/1188513
Dim result As Scripting.Dictionary
Set result = New Scripting.Dictionary
Const KEYCOL = 1, VALUECOL = 2
Dim i As Long
For i = LBound(keyValuePairs, KEYCOL) To UBound(keyValuePairs, KEYCOL)
If result.Exists(keyValuePairs(i, KEYCOL)) Then Err.Raise 457
result.Add Key:=keyValuePairs(i, KEYCOL), Item:=keyValuePairs(i, VALUECOL)
Next
Set ToDictionary = result
End Function
Теперь вы можете превратить любой 2-столбец Range
в Dictionary
как this:
Dim things As Scripting.Dictionary
Set things = ToDictionary(Sheet1.Range("A2:B21").Value)
Обратите внимание, что Range.Value
дает основанный на 1 массив 2D Variant
всякий раз, когда он ссылается на несколько ячеек.