Я пытаюсь взять данные буфера обмена, скопированные из Excel (т. Е. Текст, разделенный табуляцией), и преобразовать их в коллекцию словарей. Идея состоит в том, что каждая строка будет представлена словарем, который отображается из заголовков в значения ячеек. Первая строка в скопированных данных будет содержать заголовки.
Достать текст из буфера обмена достаточно просто:
Dim dataObj As DataObject
Dim clipString As String
Set dataObj = New DataObject
dataObj.GetFromClipboard
clipString = dataObj.GetText
Затем я делю ввод на строки:
Dim strRows As Variant
strRows = Split(clipString, vbNewLine)
Далее я пытаюсь извлечь заголовки:
Dim headers As New Collection
Dim strCols As Variant
strCols = Split(strRows(0), vbTab)
For col = LBound(strCols) To UBound(strCols) - 1
headers.Add strCols(col)
Next
Наконец я извлекаю строки:
Dim cells
Dim rows As New Collection
For i = 1 To UBound(strRows) - 1
strCols = Split(strRows(0), vbTab)
Set cells = CreateObject("Scripting.Dictionary")
For col = 0 To UBound(strCols) - 1
cells.Add headers.Item(col + 1), strCols(col)
Next
rows.Add cells
Next
Однако я получаю ошибку. На линии
headers.Add strCols(col), col
Доступ возвращается с ошибкой времени выполнения «12»: несоответствие типов.
Обновление исправлено выше, спасибо за предложения. Теперь я получаю сообщение об ошибке
Set cells = CreateObject(Scripting.Dictionary)
424: требуется объект.
Любые намеки на то, что я ошибаюсь - VBA не является моей сильной стороной.
Обновление 2 также исправила эту проблему (спасибо за предложение ниже). Код теперь работает.