Я попал в случай, когда очистка всего массива завершилась неудачно с помощью dim / redim:
с двумя массивами всего модуля, Private внутри пользовательской формы,
Один массив является динамическим и используетмодуль класса, другой исправлен и имеет специальный тип.
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
И у меня есть подпрограмма, объявленная как общедоступная для очистки этих массивов (и связанных с ними элементов управления во время выполнения) изнутри и снаружи пользовательской формы, напримерthis:
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
примечание: этот последний саб сначала был вызван извне (другой модуль формы и класса) с Call FormName.SubName
, но должен был заменить его на Application.Run FormName.SubName
, меньше ошибок, не спрашивайте, почему...