arrays - vaciar - vba destruir array
¿Cómo borrar toda la matriz? (7)
Tengo una matriz como esta:
Dim aFirstArray() As Variant
¿Cómo borro toda la matriz?
¿Qué tal una colección?
Encuentre un mejor uso para mí: generalmente pruebo si una variante está vacía y todos los métodos anteriores fallan con la prueba. Descubrí que puedes establecer una variante para vaciar:
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 esta manera obtengo el comportamiento que quiero
Es tan simple como:
Erase aFirstArray
Para eliminar una matriz dinámica en VBA, use la instrucción Erase
.
Ejemplo:
Dim ArrayDin() As Integer
ReDim ArrayDin(10) ''Dynamic allocation
Erase ArrayDin ''Erasing the Array
¡Espero que esto ayude!
Puede usar las sentencias Erase
o ReDim
para borrar la matriz:
Dim threeDimArray(9, 9, 9), twoDimArray(9, 9) As Integer
Erase threeDimArray, twoDimArray
ReDim threeDimArray(4, 4, 9)
Vea el uso diferente de cada método aquí.
Actualizar
Para eliminar una colección, itere sobre sus elementos y use el método de remove
:
For i = 1 to MyCollection.Count
MyCollection.Remove 1 '' Remove first item
Next i
Solo use la instrucción Redim
Dim aFirstArray() As Variant
Redim aFirstArray(nRows,nColumns)
caí en un caso en el que se borraba toda la matriz con dim / redim:
tener 2 arrays de todo el módulo, Privado dentro de una forma de usuario,
Una matriz es dinámica y utiliza un módulo de clase, la otra es fija y tiene un tipo especial.
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
Y tengo un sub declarado como público para borrar esas matrices (y los controles creados en tiempo de ejecución creados) desde dentro y fuera de la forma de usuario de esta manera:
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
nota: este último sub se llamó por primera vez desde fuera (otro módulo de clase y forma) con Call FormName.SubName
pero tuvo que reemplazarlo por Application.Run FormName.SubName
, menos errores, no preguntes por qué ...
[your Array name] = Empty
Entonces la matriz estará sin contenido y puede llenarse nuevamente.