J'essaie d'élargir mes connaissances de VBA avec simplement tester des bits de code étrange et déconstruire comment cela fonctionne.
J'essaie d'aller mieux à utiliser des tableaux et de les comprendre un peu plus, comme je pense que j'aurai beaucoup d'utilité pratique pour eux, mais je suis maintenant coincé lorsque vous essayez de l'utiliser conjointement avec un ListObject. P>
J'ai créé la macro ci-dessous. Il remplit avec succès la matrice, puis met le contenu dans une feuille de calcul. P>
Cependant, le problème que j'ai d'avoir est que je souhaite ajouter des valeurs à un tableau, puis ajouter ces valeurs dans une table (objets de liste) tout en conservant les données existantes là-bas. Pour le moment, cela ajoute simplement les données au sommet du tableau et remplace tout contenu existant. J'ai essayé d'utiliser de nombreuses variantes d'ajout d'une ligne de liste qui fonctionne, mais cela ne met que la première valeur dans le tableau dans la table au lieu de tout le monde. P>
Je veux créer une nouvelle ligne , Ajoutez les données, pour chaque pièce de données définissez également une autre valeur pour une colonne de cette ligne, puis continuez. P>
Par exemple, je souhaite que le code effectue les éléments suivants: P>
Sub ArrayExercise_3() Dim myArray(1 To 5) As Integer Dim i As Integer Dim arrTable As ListObject Dim arrRow As ListRow Set arrTable = ThisWorkbook.Worksheets("Array2").ListObjects("Table7") Set arrRow = arrTable.ListRows.Add myArray(1) = 10 myArray(2) = 20 myArray(3) = 30 myArray(4) = 40 myArray(5) = 50 For i = 1 To UBound(myArray) arrTable.DataBodyRange.Cells(i, 1) = myArray(i) arrTable.DataBodyRange.Cells(i, 2) = "TEST" Next i End Sub
4 Réponses :
Vous pouvez le faire ainsi. Vous devez ajouter une nouvelle ligne pour chaque élément de tableau, alors mettez-le à l'intérieur de la boucle. Je soupçonne que vous pouvez le faire sans une boucle.
Sub ArrayExercise_3() Dim myArray(1 To 5) As Integer Dim i As Integer Dim arrTable As ListObject Dim arrRow As ListRow Set arrTable = ThisWorkbook.Worksheets("Array2").ListObjects("Table7") myArray(1) = 10 myArray(2) = 20 myArray(3) = 30 myArray(4) = 40 myArray(5) = 50 For i = 1 To UBound(myArray) arrTable.ListRows.Add With arrTable.DataBodyRange .Cells(.Rows.Count, 1).Value = myArray(i) .Cells(.Rows.Count, 2) = "TEST" End With Next i End Sub
Vous devez ajouter des lignes à l'intérieur de votre boucle, comme ceci:
Tout d'abord, vous devriez déplacer l'expansion de la liste ListObject à l'intérieur de la boucle, de sorte qu'une nouvelle ligne est insérée pour chaque élément de tableau.
second, l'indexation de la matrice et de la liste ListObject est différente. P >
troisième, si vous écrivez ubound, il vaut mieux écrire LBound. P>
Sub ArrayExercise_3() Dim myArray(1 To 5) As Integer Dim i As Integer Dim arrTable As ListObject Dim arrRow As ListRow Set arrTable = ThisWorkbook.Worksheets("Array2").ListObjects("Table7") myArray(1) = 10 myArray(2) = 20 myArray(3) = 30 myArray(4) = 40 myArray(5) = 50 For i = LBound(myArray) To UBound(myArray) Set arrRow = arrTable.ListRows.Add arrTable.DataBodyRange.Cells(arrTable.DataBodyRange.Rows.Count, 1).Value = myArray(i) arrTable.DataBodyRange.Cells(arrTable.DataBodyRange.Rows.Count, 2).Value = "TEST" Next i End Sub
J'évite d'utiliser listObject.databodyRange code> lors de l'ajout de lignes. La table n'a pas de lignes alors
listObject.databodyRange = rien code>. C'est beaucoup plus simple d'utiliser
listObject.listrows.add.range code> qui retournera toujours un objet de plage.