我正在尝试从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
Access返回时出现运行时错误“12”:类型不匹配。
更新解决了上述问题,感谢您的建议。现在我收到了错误
Set cells = CreateObject(Scripting.Dictionary)
424:需要对象。
关于我的错误的任何提示 - VBA并不是我的强项。
更新2 也解决了这个问题(感谢下面的建议)。代码现在有效。
答案 0 :(得分:3)
对于你的第二个问题 - 你需要提供目标类的字符串名称,所以它实际上是
Set cells = CreateObject("Scripting.Dictionary")
答案 1 :(得分:2)
我认为col必须是字符串类型。
headers.Add strCols(col), cstr(col)