Hoe de hele array wissen?

Ik heb een array als deze:

Dim aFirstArray() As Variant

Hoe wis ik de hele array?
Hoe zit het met een verzameling?


Antwoord 1, autoriteit 100%

U kunt de instructies Eraseof Redimgebruiken om de array te wissen. Voorbeelden van elk worden getoond in de MSDN-documentatie . Bijvoorbeeld:

Dim threeDimArray(9, 9, 9), twoDimArray(9, 9) As Integer
Erase threeDimArray, twoDimArray
ReDim threeDimArray(4, 4, 9)

Als u een verzameling wilt verwijderen, herhaalt u de items en gebruikt u de methode Remove:

For i = 1 to MyCollection.Count
  MyCollection.Remove 1 ' Remove first item
Next i

Antwoord 2, autoriteit 24%

Voor het verwijderen van een dynamische array in VBA gebruik je de instructie Erase.

Voorbeeld:

Dim ArrayDin() As Integer    
ReDim ArrayDin(10)    'Dynamic allocation 
Erase ArrayDin        'Erasing the Array   

Ik hoop dat dit helpt!


Antwoord 3, autoriteit 6%

Het is zo simpel als:

Erase aFirstArray

Antwoord 4, autoriteit 3%

Zoek een beter gebruik voor mezelf:
Ik test meestal of een variant leeg is en alle bovenstaande methoden mislukken met de test. Ik heb ontdekt dat je een variant op leeg kunt zetten:

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

op deze manier krijg ik het gewenste gedrag


Antwoord 5, autoriteit 2%

[your Array name] = Empty

De array is dan zonder inhoud en kan opnieuw worden gevuld.


Antwoord 6

ReDim aFirstArray(0)

Hiermee wordt de grootte van de array gewijzigd naar nul en worden alle gegevens gewist.


Antwoord 7

ik kwam in een geval terecht waarbij het wissen van de hele array mislukte met dim/redim :

met 2 module-brede arrays, privé in een gebruikersformulier,

Eén array is dynamisch en gebruikt een klassenmodule, de andere is vast en heeft een speciaal type.

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

En ik heb een sub die als openbaar is gedeclareerd om die arrays (en bijbehorende door runtime gemaakte besturingselementen) van binnen en buiten het gebruikersformulier als volgt te wissen:

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

opmerking: deze laatste sub werd eerst van buitenaf aangeroepen (andere formulier- en klassenmodule) met Call FormName.SubNamemaar moest deze vervangen door Application.Run FormName.SubName, minder fouten, vraag niet waarom…


Antwoord 8

Gebruik alleen Redim-instructie

Dim aFirstArray() As Variant
Redim aFirstArray(nRows,nColumns)

Other episodes