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.

Était-ce utile?

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top