J'ai un tableau comme celui-ci:
Dim aFirstArray() As Variant
Comment effacer tout le tableau?
Qu'en est-il d'une collection?
Vous pouvez utiliser les instructions Erase
ou ReDim
pour effacer le tableau:
Dim threeDimArray(9, 9, 9), twoDimArray(9, 9) As Integer
Erase threeDimArray, twoDimArray
ReDim threeDimArray(4, 4, 9)
Voir les différentes utilisations de chaque méthode ici.
Mettre à jour
Pour supprimer une collection, vous devez parcourir ses éléments et utiliser 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
J'espère que cette aide!
C'est aussi simple que:
Erase aFirstArray
[your Array name] = Empty
Ensuite, le tableau sera sans contenu et pourra être rempli à nouveau.
Trouvez-en un meilleur usage pour moi-même: J'ai trouvé que vous pouvez réellement définir une variante pour vider:
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
de cette façon, je reçois le comportement que je veux
ReDim aFirstArray(0)
Cela redimensionnera le tableau à zéro et effacera toutes les données.
je suis tombé dans un cas où l'effacement de l'ensemble du tableau a échoué avec dim/redim:
avoir 2 tableaux à l'échelle du module, Privé à l'intérieur d'un userform,
Un tableau est dynamique et utilise un module de classe, l'autre est fixe et possède 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 un sous déclaré comme public pour effacer ces tableaux (et les contrôles créés au moment de l'exécution associés) de l'intérieur et de 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
remarque: ce dernier sous a d'abord été appelé de l'extérieur (autre module de formulaire et de classe) avec Call FormName.SubName
mais a dû le remplacer par Application.Run FormName.SubName
, moins d'erreurs, ne demandez pas pourquoi ...