web-dev-qa-db-fra.com

Comment imprimer un tableau à deux dimensions dans une fenêtre immédiate dans VBA?

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.

11
Qbik

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
7
user3706920

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.

  1. Dans VBA IDE, cliquez sur le menu Affichage> Fenêtre Locaux
  2. Dans le volet Local, recherchez le nom du tableau.  enter image description here
  3. Développez les nœuds pour trouver vos valeurs. Les nœuds seront différents selon le type de tableau. 

Dans cet exemple, "aLookList" est un tableau variant. Les valeurs sous "Valeur2" proviennent d'une plage. 

 enter image description here

 enter image description here

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. 

12
johny why

Non, vous devrez soit;

  • Créez et appelez une fonction qui boucle et l’imprime dans la fenêtre de débogage.
  • S'il s'agit d'un débogage, cliquez avec le bouton droit de la souris sur la variable dans IDE & "Ajouter un suivi", ce qui affichera une fenêtre qui suivra les modifications apportées à la valeur du tableau et affichera son contenu lorsqu'un point d'arrêt est atteint.
10
Alex K.

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
1
Swapnil

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
)
0
Yaslaw

Essaye ça

Vous pouvez également taper code1: code2 au lieu de code1 _
Ceci est uniquement pour l'affichage
Si arr est défini comme tableau (array (,), array (,) ...)
et alors 
Vous devez: c = Lbound (arr (r), 1) à ubound (arr (r), 1) 
Debug.Print arr (r) (c) 
Parce que le premier est 2d Array et le dernier est 1nd Array. 
JE

'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
0
user3235365