Ich versuche, Daten aus der Zwischenablage, die aus Excel kopiert wurden (d. H. Durch Tabulator getrennte Texte), in eine Sammlung von Wörterbüchern zu zerlegen. Die Idee ist, dass jede Zeile durch ein Dictionary repräsentiert wird, das von Kopfzeilen auf Zellenwerte abbildet. Die erste Zeile in den kopierten Daten enthält die Header.Tabulatorseparierte Werte in VBA analysieren
den Text aus der Zwischenablage zu erhalten 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 extrahiere 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
Ich erhalte jedoch einen Fehler. Auf der Linie
Zugriff kommt zurück mit Laufzeitfehler '12': Typ Mismatch.
Update behoben das Problem oben, danke für die Vorschläge. Jetzt erhalte ich einen Fehler in der Zeile
Set cells = CreateObject(Scripting.Dictionary)
424: Objekt erforderlich.
Alle Hinweise, was ich diong falsch bin - VBA ist nicht wirklich meine Stärke.
Update 2 behebt dieses Problem auch (Danke für den Vorschlag unten). Der Code funktioniert jetzt.
Danke, das war das letzte Glied in der Kette. Typische MSFT-Dokumente waren falsch (ich hatte direkt für dieses Bit kopiert). – jwoolard