在VBA

2009-06-23 64 views
2

解析製表符分隔值我試圖從Excel文件(即製表符分隔文本)複製剪貼板數據,並將其解析成字典的集合。這個想法是,每一行將由一個從標題映射到單元格值的字典表示。複製數據中的第一行將包含標題。在VBA

獲取剪貼板中的文字是很容易的:

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:需要對象。

任何提示,以什麼我diong錯了 - VBA是不是我的強項。

更新2修復了這個問題太(下面的建議感謝)。代碼現在可用。

回答

3

你的第二個問題 - 你需要提供目標類的字符串名稱,所以它實際上是

Set cells = CreateObject("Scripting.Dictionary") 
+0

謝謝,這是鏈中的最後一個環節。典型的MSFT文檔是錯誤的(我已經直接複製粘貼該位)。 – jwoolard 2009-06-23 13:04:17

2

我認爲山坳必須是字符串類型。

headers.Add strCols(col), cstr(col)

+1

..from微軟: 公用Sub添加(_ BYVAL項目爲對象,_ 可選BYVAL重點,作爲字符串_ 可選BYVAL {之前|之後}爲對象=無_ ) – ozczecho 2009-06-23 12:19:10