2010-06-10 21 views

Respuesta

82

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 
+0

¿qué pasa con una colección? –

+0

@I: ver mi respuesta actualizada, por favor. – Sarfraz

+0

Solo una nota rápida, al menos para VBA, no puede ReDiminar una matriz que fue declarada con dimensiones. – KevenDenen

15

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!

+3

¿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

+0

@GSerg que es una oración muy bien formulada. –

+7

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

7

es tan simple como:

Erase aFirstArray 
+0

La misma respuesta que la que Andrés publicó 4 años antes. No puedo ver cómo eso es útil. – trincot

0

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é ...

2
[your Array name] = Empty 

Entonces la matriz estará sin contenido y puede ser llenado nuevamente.

+1

Esto no funciona. Obtiene un "Error de compilación: no se puede asignar a la matriz" – seadoggie01

0

Sólo use Redim comunicado

Dim aFirstArray() As Variant 

Redim aFirstArray(nRows,nColumns) 
0

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

Cuestiones relacionadas