web-dev-qa-db-fra.com

Comment effacer tout le tableau?

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
101
Sarfraz

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!

19
Andres Sommerhoff

C'est aussi simple que:

Erase aFirstArray
6
Jaanus
[your Array name] = Empty

Ensuite, le tableau sera sans contenu et pourra être rempli à nouveau.

2
Koke

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

0
Rafiki
ReDim aFirstArray(0)

Cela redimensionnera le tableau à zéro et effacera toutes les données.

0
SUNIL KUMAR

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

0