J'ai un tableau comme celui-ci:Comment effacer l'ensemble du tableau?
Dim aFirstArray() As Variant
Comment puis-je effacer tout le tableau?
Qu'en est-il d'une collection?
J'ai un tableau comme celui-ci:Comment effacer l'ensemble du tableau?
Dim aFirstArray() As Variant
Comment puis-je effacer tout le tableau?
Qu'en est-il d'une collection?
Vous pouvez utiliser les Erase
ou ReDim
déclarations pour effacer le tableau:
Dim threeDimArray(9, 9, 9), twoDimArray(9, 9) As Integer
Erase threeDimArray, twoDimArray
ReDim threeDimArray(4, 4, 9)
See the different usage of each method here.
Mise à jour
Pour supprimer une collection, vous itérer sur ses articles et utilisez la méthode remove
:
For i = 1 to MyCollection.Count
MyCollection.Remove 1 ' Remove first item
Next i
Pour supprimer un tableau dynamique dans VBA, utilisez l'instruction Erase
.
Exemple:
Dim ArrayDin() As Integer
ReDim ArrayDin(10) 'Dynamic allocation
Erase ArrayDin 'Erasing the Array
Hope this aide!
Quelle était la raison pour laquelle vous avez répondu à une question deux ans après que la question ait été posée, à condition que cette réponse ait déjà été postée? – GSerg
@GSerg qui est une phrase très bien formulée. –
commentaires sans importance à vous deux. Aucune réponse ne démontre Erase. De plus, c'est presque un an après qu'Andres a posté sa réponse et qu'elle m'a donné la solution de code d'une ligne que je cherchais. Si je pouvais rétrograder vos deux commentaires, je le ferais. – oscilatingcretin
Il est aussi simple que:
Erase aFirstArray
Même réponse que celle d'Andres publiée 4 ans plus tôt. Je ne vois pas comment cela est utile. – trincot
je suis tombé dans un cas où le défrichement l'ensemble du réseau a échoué avec dim/redim:
ayant 2 tableaux de modules à l'échelle, privé à l'intérieur d'un userform,
Un tableau est dynamique et utilise un module de classe, l'autre est fixe et a un type spécial.
Option Explicit
Private Type Perso_Type
Nom As String
PV As Single 'Long 'max 1
Mana As Single 'Long
Classe1 As String
XP1 As Single
Classe2 As String
XP2 As Single
Classe3 As String
XP3 As Single
Classe4 As String
XP4 As Single
Buff(1 To 10) As IPicture 'Disp
BuffType(1 To 10) As String
Dances(1 To 10) As IPicture 'Disp
DancesType(1 To 10) As String
End Type
Private Data_Perso(1 To 9, 1 To 8) As Perso_Type
Dim ImgArray() As New ClsImage 'ClsImage is a Class module
Et j'ai une sous déclarée publique pour effacer les tableaux (et associés contrôles créés d'exécution) à l'intérieur et à l'extérieur du userform comme ceci:
Public Sub EraseControlsCreatedAtRunTime()
Dim i As Long
On Error Resume Next
With Me.Controls 'removing all on run-time created controls of the Userform :
For i = .Count - 1 To 0 Step -1
.Remove i
Next i
End With
Err.Clear: On Error GoTo 0
Erase ImgArray, Data_Perso
'ReDim ImgArray() As ClsImage ' i tried this, no error but wouldn't work correctly
'ReDim Data_Perso(1 To 9, 1 To 8) As Perso_Type 'without the erase not working, with erase this line is not needed.
End Sub
Note: ce dernier sous était d'abord appelé à l'extérieur (autre forme et module de classe) avec Call FormName.SubName
mais a dû le remplacer par Application.Run FormName.SubName
, moins d'erreurs, ne demandez pas pourquoi ...
[your Array name] = Empty
Ensuite, le tableau sera sans contenu et peut être rempli à nouveau.
Cela ne fonctionne pas. Vous obtenez une "erreur de compilation: impossible d'affecter au tableau" – seadoggie01
Utilisez uniquement des Redim
déclaration
Dim aFirstArray() As Variant
Redim aFirstArray(nRows,nColumns)
Trouver une meilleure utilisation pour moi-même: je teste habituellement si une variante est vide, et toutes les méthodes ci-dessus échouent au test. Je trouve que vous pouvez réellement définir une variante à vide:
Dim aTable As Variant
If IsEmpty(aTable) Then
'This is true
End If
ReDim aTable(2)
If IsEmpty(aTable) Then
'This is False
End If
ReDim aTable(2)
aTable = Empty
If IsEmpty(aTable) Then
'This is true
End If
ReDim aTable(2)
Erase aTable
If IsEmpty(aTable) Then
'This is False
End If
cette façon que je reçois le comportement que je veux
Qu'en est-il une collection? –
@I: voir ma réponse mise à jour s'il vous plaît. – Sarfraz
Juste une note rapide, au moins pour VBA, vous ne pouvez pas ReDim un tableau qui a été déclaré avec des dimensions. – KevenDenen