2012-03-26 11 views
1

Finalement, j'essaie d'écrire une plage dans un fichier texte. Lorsque j'obtiens la valeur de la plage, elle renvoie un tableau de variantes 2d. Cependant, si j'essaie de le passer à la fonction de conversion, cela me donne une erreur d'incompatibilité de type.Essayer de convertir un tableau variant en chaîne délimitée et obtenir toujours une incompatibilité de type

Le code est:

Dim Data As String 
Set ts = fso.CreateTextFile("testfile.txt", True) 
Data = ArrayToDelimitedString(wksMyWorkSheet.Range("rngMyRange").Value) 
ts.Write (Data) 
ts.Close 

Public Function ArrayToDelimitedString(variantArray() As Variant) As String 
    Dim delimitedString As String, index As Integer 

    For index = 1 To UBound(variantArray(1)) 
     delimitedString = delimitedString & CStr(variantArray(1, index)) & "," 
    Next 
    ArrayToDelimitedString = Left(delimitedString, Len(delimitedString) - 1) 
End Function 

Je me demande pourquoi le .Value retourne un tableau 2d et pourquoi est-il me donner cette erreur de décalage.

+0

wksMyWorkSheet.Range ("rngMyRange"). Valeur retourne un tableau 3D (une variante contenant des objets Variant). Quel type de plage utilisez-vous? Une rangée? Une colonne? une zone? –

+0

La plage est une rangée. Est-ce un tableau 3D? Lorsque je parcours le code, les sections locales montrent qu'il s'agit d'une variante/variante (1 à 1, 1 à 7). Désolé, je n'utilise VBA que depuis un mois, donc je ne le connais pas trop. – rcell

+0

Eh bien, la méthode Range renvoie toujours un tableau 3D. Si vous essayez d'utiliser la méthode Transpose avec le tableau 3D, il va transposer votre matrice d'éléments (ce qui n'est pas ce dont vous aviez besoin). Mais pour des lignes ou des colonnes uniques, le type de données sera déplacé de Variant/Variant (1 à 1, 1 à 7) To Variant/String. –

Répondre

2

La méthode Range() renvoie un Variant de Variant. Dans le cas où vous souhaitez utiliser un tableau 2D (Variant of Strings), utilisez la méthode Transpose.

ArrayToDelimitedString(wApplication.WorksheetFunction.Transpose(wksMyWorkSheet.Range("rngMyRange").Value)) 
Questions connexes