Pergunta

Eu estou tentando levar os dados da área de transferência copiados de Excel (guia ou seja separado texto) e analisá-lo em uma coleção de dicionários. A idéia é que cada linha será representado por um dicionário que mapeia a partir de cabeçalhos para os valores das células. A primeira linha nos dados copiados conterá os cabeçalhos.

Obter o texto da área de transferência é bastante fácil:

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

Então eu dividir a entrada em linhas:

Dim strRows As Variant

strRows = Split(clipString, vbNewLine)

Em seguida eu tentar extrair os cabeçalhos:

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

Finalmente eu extrair as linhas:

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

No entanto, eu estou recebendo um erro. Na linha

headers.Add strCols(col), col

Acesso volta com Run-time error '12':. Incompatibilidade de tipo

Atualizar corrigiu o problema acima, obrigado pelas sugestões. Agora eu estou recebendo um erro na linha

Set cells = CreateObject(Scripting.Dictionary)

424: Objeto necessário

.

Todas as dicas sobre o que eu estou diong errado -. VBA não é realmente o meu forte

Update 2 fixos esta questão demasiado (obrigado pela sugestão abaixo). O código agora funciona.

Foi útil?

Solução

Para seu segundo problema - você precisa fornecer o nome da seqüência da classe alvo, por isso é realmente

Set cells = CreateObject("Scripting.Dictionary")

Outras dicas

Eu acho col tem que ser do tipo string.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top