it-swarm.com.de

Wie lösche ich das gesamte Array?

Ich habe ein Array wie dieses:

Dim aFirstArray() As Variant

Wie lösche ich das gesamte Array?
Was ist mit einer Sammlung?

Sie können entweder die Anweisungen Erase oder ReDim verwenden, um das Array zu löschen:

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

Hier sehen Sie die unterschiedliche Verwendung der einzelnen Methoden.

Update

Um eine Auflistung zu entfernen, iterieren Sie ihre Elemente und verwenden die remove-Methode:

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

Zum Löschen eines dynamischen Arrays in VBA verwenden Sie die Anweisung Erase

Beispiel:

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

Ich hoffe das hilft!

19

Es ist so einfach wie:

Erase aFirstArray
6
Jaanus
[your Array name] = Empty

Dann ist das Array ohne Inhalt und kann erneut gefüllt werden.

2
Koke

Finden Sie eine bessere Verwendung für mich: Normalerweise teste ich, ob eine Variante leer ist, und alle oben genannten Methoden schlagen beim Test fehl. Ich habe festgestellt, dass Sie tatsächlich eine Variante auf leer setzen können:

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

auf diese Weise bekomme ich das Verhalten, das ich will

0
Rafiki
ReDim aFirstArray(0)

Dadurch wird das Array auf null gesetzt und alle Daten gelöscht.

0
SUNIL KUMAR

ich fiel in einen Fall, in dem das Löschen des gesamten Arrays mit dim/redim fehlgeschlagen ist:

mit 2 modulweiten Arrays, Private in einem Benutzerformular,

Ein Array ist dynamisch und verwendet ein Klassenmodul, das andere ist fest und hat einen speziellen Typ.

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

Und ich habe ein Sub als public deklariert, um diese Arrays (und die dazugehörigen durch die Laufzeit erstellten Steuerelemente) innerhalb und außerhalb des Benutzerformulars wie folgt zu löschen:

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

hinweis: Dieses letzte U-Boot wurde zuerst von außen (anderes Formular- und Klassenmodul) mit Call FormName.SubName aufgerufen, musste jedoch durch Application.Run FormName.SubName ersetzt werden. Weniger Fehler. Fragen Sie nicht nach dem Grund.

0