Comment imprimer un tableau à deux dimensions dans la fenêtre Immédiate dans VBA? Existe-t-il une méthode générique pour ce faire? Une méthode permettant de tracer une ligne de tableau par ligne dans la fenêtre Immédiat pourrait résoudre ce problème, car la seule chose à faire est de boucler ce code pour chaque ligne de tableau.
J'ai fait une boucle simple pour faire cela pour la référence de n'importe qui:
Sub WriteArrayToImmediateWindow(arrSubA As Variant)
Dim rowString As String
Dim iSubA As Long
Dim jSubA As Long
rowString = ""
Debug.Print
Debug.Print
Debug.Print "The array is: "
For iSubA = 1 To UBound(arrSubA, 1)
rowString = arrSubA(iSubA, 1)
For jSubA = 2 To UBound(arrSubA, 2)
rowString = rowString & "," & arrSubA(iSubA, jSubA)
Next jSubA
Debug.Print rowString
Next iSubA
End Sub
S'il s'agit d'un débogage, il n'est pas pratique d'écrire une macro pour afficher le contenu du tableau pendant l'exécution du programme. Peut même causer des problèmes.
Pour le débogage pendant l'exécution du programme, vous aurez besoin d'une méthode sans code que vous pouvez utiliser dans tous les projets VB, pour espionner le contenu de votre tableau.
Dans cet exemple, "aLookList" est un tableau variant. Les valeurs sous "Valeur2" proviennent d'une plage.
Une autre réponse ici suggère d'utiliser le volet Regarder. Ceci est similaire à ma réponse, mais l’affiche ne dit pas que vous pouvez espionner tout le tableau (toutes les cellules) en ajoutant simplement le nom du tableau à Regarder. Ensuite, explorez les nœuds. L'avantage de la fenêtre Locals par rapport à la fenêtre de surveillance est que, dans le volet Locals, il n'est pas nécessaire d'ajouter manuellement le tableau dans le volet, il est déjà présent. Donc, c'est un peu moins d'effort.
Non, vous devrez soit;
coller ci-dessous les données de la colonne A (Nom) de la colonne B (Âge)
Name Age
A 10
B 20
C 30
D 40
E 50
F 60
G 70
et lancez le code ci-dessous
Sub Array_Demo()
Dim arr() As String
Dim i As Integer, j As Integer
' fill the array with strings
Last = Range("A" & Rows.Count).End(xlUp).Row
ReDim arr(Last, 1)
For i = 0 To Last - 1
arr(i, 0) = Cells(i + 1, 1).Value
arr(i, 1) = Cells(i + 1, 2).Value
Next
' only one loop to display its contents !!!
Dim v As Variant
For Each v In arr
Debug.Print v
Next
End Sub
Vous pouvez voir la sortie ci-dessous dans la fenêtre Immédiat
Name
A
B
C
D
E
F
G
Age
10
20
30
40
50
60
70
J'ai écrit ma propre fonction pour cela. print_r () pour VBA . Il peut évaluer des tableaux, dictionnaires, Collection, MatchCollection, etc. De plus, les types de données sont spécifiés et les caractères spéciaux sont affichés dans des chaînes au format Unicode.
http://wiki.yaslaw.info/doku.php/vba/functions/print_r/index
print_r(array(1,2,3,array("A","B")))
<Variant()> (
[0] => <Integer> 1
[1] => <Integer> 2
[2] => <Integer> 3
[3] => <Variant()> (
[0] => <String> 'A'
[1] => <String> 'B'
)
)
print_r([{1,2;3,4}])
<Variant()> (
[1.1] => <Double> 1
[1.2] => <Double> 2
[2.1] => <Double> 3
[2.2] => <Double> 4
)
'Define 2d array
arr = [ {"A",1; "B",2; "C",3 } ]: _
For r = LBound(arr, 1) To UBound(arr, 1): _
For c = LBound(arr, 2) To UBound(arr, 2): _
Debug.Print arr(r, c): _
Next c: _
Next