我有一个像这样的数组:
Dim aFirstArray() As Variant
如何清空整个数组? 集合呢?
你可以使用Erase
或ReDim
语句来清空数组。每个语句的示例都在MSDN文档中展示。例如:
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
发掘更好的用途:
我通常测试变量是否为空,而所有上述方法都无法通过测试。我发现实际上可以将变量设置为空:
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
这样我就能获得所需的行为
[your Array name] = Empty
ReDim aFirstArray(0)
我遇到了一个问题,使用dim/redim清空整个数组失败:
有两个模块级数组,都是在用户窗体内部的私有数组,
其中一个数组是动态的,使用类模块,另一个是固定的,具有特殊类型。
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
,这样会减少错误,别问为什么...只使用Redim
语句
Dim aFirstArray() As Variant
Redim aFirstArray(nRows,nColumns)
ReDim
会怎么样?它会简单地将值重置为零,还是会分配一个全新的数组?我担心的是在循环中调用ReDim
来重置一个大数组时的时间性能问题。 - Cavaz