私はこのような配列を持っています:
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
その後、配列はコンテンツなしになり、再び入力できます。
ReDim aFirstArray(0)
これにより、配列のサイズがゼロに変更され、すべてのデータが消去されます。
自分のためのより良い使用法を見つける:私は通常、バリアントが空であるかどうかをテストし、上記の方法はすべてテストで失敗します。実際にバリアントを空に設定できることがわかりました:
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
このように、私は私が望む行動を得る
私はdim/redimで配列全体のクリアに失敗した場合に陥りました:
2つのモジュール全体の配列、ユーザーフォーム内のプライベート、
1つの配列は動的でクラスモジュールを使用し、もう1つの配列は固定で特別な型を持っています。
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
そして、私はこれらの配列(および関連するランタイム作成されたコントロール)をこのようにユーザーフォームの内側と外側からクリアするためにパブリックとして宣言されたサブを持っています:
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
に置き換える必要がありました。