Parse Tab valeurs séparées dans VBA
-
06-07-2019 - |
Question
J'essaie de prendre des données du Presse-papiers copiées à partir d'Excel (texte séparé par des tabulations) et de les analyser dans une collection de dictionnaires. L'idée est que chaque ligne soit représentée par un dictionnaire qui mappe des en-têtes aux valeurs de cellules. La première ligne des données copiées contiendra les en-têtes.
Obtenir le texte du presse-papiers est assez simple:
Dim dataObj As DataObject
Dim clipString As String
Set dataObj = New DataObject
dataObj.GetFromClipboard
clipString = dataObj.GetText
Ensuite, je scissionne l'entrée en lignes:
Dim strRows As Variant
strRows = Split(clipString, vbNewLine)
Ensuite, j'essaie d'extraire les en-têtes:
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
Enfin, j'extrais les lignes:
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
Cependant, je reçois une erreur. Sur la ligne
headers.Add strCols(col), col
Access revient avec l'erreur d'exécution '12': incompatibilité de type.
Mise à jour a résolu le problème ci-dessus, merci pour les suggestions. Maintenant, je reçois une erreur sur la ligne
Set cells = CreateObject(Scripting.Dictionary)
424: objet requis.
Toute allusion à ce que je ne me trompe pas - VBA n'est pas vraiment mon fort.
Mise à jour 2 a également résolu ce problème (merci de votre suggestion ci-dessous). Le code fonctionne maintenant.
La solution
Pour votre deuxième problème, vous devez fournir le nom de chaîne de la classe cible.
Set cells = CreateObject("Scripting.Dictionary")
Autres conseils
Je pense que col doit être du type chaîne.
en-têtes.Ajouter strCols (col), cstr (col)