visual vaciar una matriz limpiar destruir como arreglo array arrays vba excel-vba excel

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.