У меня есть такой массив:
Dim aFirstArray() As Variant
Как очистить весь массив?
Как насчет коллекции?
У меня есть такой массив:
Dim aFirstArray() As Variant
Как очистить весь массив?
Как насчет коллекции?
Вы можете использовать операторы Erase
или ReDim
для очистки массива:
Dim threeDimArray(9, 9, 9), twoDimArray(9, 9) As Integer
Erase threeDimArray, twoDimArray
ReDim threeDimArray(4, 4, 9)
Смотрите здесь различные способы использования.
Обновление
Чтобы удалить коллекцию, вы перебираете ее элементы и используете метод remove
:
For i = 1 to MyCollection.Count
MyCollection.Remove 1 ' Remove first item
Next i
Для удаления динамического массива в VBA используйте команду Erase
.
Пример:
Dim ArrayDin() As Integer
ReDim ArrayDin(10) 'Dynamic allocation
Erase ArrayDin 'Erasing the Array
Надеюсь на эту помощь!
Это так же просто, как:
Erase aFirstArray
[your Array name] = Empty
Затем массив будет без содержимого и может быть снова заполнен.
i упал в случай, когда очистка всего массива завершилась неудачей с помощью dim/redim:
с 2-мя модульными массивами, приватными внутри пользовательской формы,
Один массив является динамическим и использует модуль класса, другой - фиксированный и имеет особый тип.
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
И у меня есть sub, объявленный как public, чтобы очистить эти массивы (и связанные с ними временные элементы управления) изнутри и вне пользовательской формы, например:
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
note: последний последний был вызван извне (другой модуль формы и класса) с Call FormName.SubName
, но ему пришлось заменить его на Application.Run FormName.SubName
, меньше ошибок, не спрашивайте, почему...
Используйте оператор Redim
Dim aFirstArray() As Variant
Redim aFirstArray(nRows,nColumns)