que tiene una matriz de esta manera:¿Cómo borrar toda la matriz?
Dim aFirstArray() As Variant
¿Cómo se borra toda la matriz?
¿Qué tal una colección?
que tiene una matriz de esta manera:¿Cómo borrar toda la matriz?
Dim aFirstArray() As Variant
¿Cómo se borra toda la matriz?
¿Qué tal una colección?
Usted puede utilizar el Erase
o ReDim
declaraciones para borrar la matriz:
Dim threeDimArray(9, 9, 9), twoDimArray(9, 9) As Integer
Erase threeDimArray, twoDimArray
ReDim threeDimArray(4, 4, 9)
See the different usage of each method here.
actualización
Para eliminar una colección, iterar sobre sus artículos y utilice el método remove
:
For i = 1 to MyCollection.Count
MyCollection.Remove 1 ' Remove first item
Next i
Para eliminar una matriz dinámica en VBA, utilice la instrucción Erase
.
Ejemplo:
Dim ArrayDin() As Integer
ReDim ArrayDin(10) 'Dynamic allocation
Erase ArrayDin 'Erasing the Array
Esperanza esta ayuda!
¿Cuál fue el motivo para publicar una respuesta dos años después de que se hizo la pregunta, siempre que esta misma respuesta ya se haya publicado? – GSerg
@GSerg que es una oración muy bien formulada. –
comentarios sin valor para ustedes dos. Ninguna respuesta demuestra Erase. Además, es casi un año después de que Andrés publicó su respuesta y realmente me dio la solución de código de una línea que estaba buscando. Si pudiera rechazar ambos comentarios, lo haría. – oscilatingcretin
es tan simple como:
Erase aFirstArray
La misma respuesta que la que Andrés publicó 4 años antes. No puedo ver cómo eso es útil. – trincot
caí en un caso en el que despejar todo el array falló con dim/redim:
que tiene 2 arrays de todo el módulo, privado dentro de un formulario 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 una sub declarados como públicos para borrar esas matrices (y asociado controles en tiempo de ejecución creado) desde el interior y el exterior el formulario de usuario como esto:
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 era primera llamada desde fuera (otra forma y módulo de clase) con Call FormName.SubName
pero tuvo que reemplazarlo con Application.Run FormName.SubName
, menos errores, no le pregunte por qué ...
[your Array name] = Empty
Entonces la matriz estará sin contenido y puede ser llenado nuevamente.
Esto no funciona. Obtiene un "Error de compilación: no se puede asignar a la matriz" – seadoggie01
Sólo use Redim
comunicado
Dim aFirstArray() As Variant
Redim aFirstArray(nRows,nColumns)
Encontrar un mejor uso para mí mismo: por lo general prueba si una variante está vacía, y todos los métodos anteriores fallan con la prueba. He descubierto que en realidad se puede 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
esta manera me sale el comportamiento quiero
¿qué pasa con una colección? –
@I: ver mi respuesta actualizada, por favor. – Sarfraz
Solo una nota rápida, al menos para VBA, no puede ReDiminar una matriz que fue declarada con dimensiones. – KevenDenen