Parsen Tab getrennte Werte in VBA
-
06-07-2019 - |
Frage
Ich versuche, Daten aus der Zwischenablage aus Excel (das heißt durch Tabulatoren getrennte Text) und analysieren sie in eine von mehreren Wörterbüchern kopiert zu nehmen. Die Idee ist, dass jede Reihe wird von einem Wörterbuch dargestellt werden, die auf Zellenwerte aus Header abbildet. Die erste Zeile in den kopierten Daten die Header enthalten.
Immer den Text aus der Zwischenablage ist einfach genug:
Dim dataObj As DataObject
Dim clipString As String
Set dataObj = New DataObject
dataObj.GetFromClipboard
clipString = dataObj.GetText
Dann teile ich die Eingabe in Reihen:
Dim strRows As Variant
strRows = Split(clipString, vbNewLine)
Als nächstes versuche ich die Header zu extrahieren:
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
Schließlich extrahieren ich die Zeilen:
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
Allerdings erhalte ich einen Fehler. Auf der Linie
headers.Add strCols(col), col
Der Zugang kommt zurück mit Laufzeitfehler ‚12‘:. Typenkonflikt
Aktualisieren das Problem behoben oben, vielen Dank für die Anregungen. Jetzt bin ich einen Fehler auf der Linie bekommen
Set cells = CreateObject(Scripting.Dictionary)
424:. Objekt erforderlich
Für Hinweise, was ich bin Diong falsch -. VBA ist nicht wirklich meine Stärke
Update 2 festgelegt dieses Problem zu (danke für Vorschlag unten). Der Code funktioniert jetzt.
Lösung
Für Ihr zweites Problem - müssen Sie den Zeichenfolge Namen der Zielklasse bieten, so ist es eigentlich
Set cells = CreateObject("Scripting.Dictionary")
Andere Tipps
Ich denke, col hat String-Typ sein.
headers.Add strCols(col), cstr(col)