2009-06-23 5 views
2

Excel에서 복사 한 클립 보드 데이터 (예 : 탭으로 구분 된 텍스트)를 가져와 사전 컬렉션으로 구문 분석하려고합니다. 아이디어는 각 행이 머리글에서 셀 값으로 매핑되는 사전으로 표시된다는 것입니다. 복사 된 데이터의 첫 번째 행에는 헤더가 포함됩니다.VBA에서 파스 탭으로 구분 된 값

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 strRows As Variant 

strRows = Split(clipString, vbNewLine) 

다음 : I 행에 입력을 분할 그런

Dim dataObj As DataObject 
Dim clipString As String 
Set dataObj = New DataObject 
dataObj.GetFromClipboard 
clipString = dataObj.GetText 

: 클립 보드의 텍스트를 얻기

쉽게 충분하다

마지막으로 행을 추출합니다.

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이 문제도 해결되었습니다 (아래 제안 주셔서 감사합니다). 이제 코드가 작동합니다.

답변

3

- 당신은 대상 클래스의 문자열 이름을 제공해야합니다, 그래서 실제로

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

감사합니다. 그 링크의 마지막 링크입니다. 일반적인 MSFT 문서는 잘못되었습니다 (직접 복사하여 붙여 넣기했습니다). – jwoolard

2

저는 col이 문자열 유형이어야한다고 생각합니다. 두 번째 문제에 대한

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

+1

..from 마이크로 소프트의 : 공공 하위 추가 (_ ByVal의 항목 Object로 _ 선택 ByVal Key As String, _ 선택 ByVal {Before | After} As Object = Nothing _ ) – ozczecho