我有一个动态数组,我想从中删除一个项目。我知道我们可以通过减少1的大小并重新调整它来删除数组末尾的项目。但是有没有办法从阵列中删除项目,无论项目在阵列上的什么位置?
没有内置函数可以从数组中删除。因此,唯一的方法是将每个值“拉”一个,然后重新调暗以减去最后一个值。
数组可以追溯到20世纪70年代末和80年代早期在个人电脑上流行的FORTAN和早期GWBASIC语言。大多数新语言(包括VBA)都有更好的选择。因为这是一种“痛苦”的方法,所以我会构建一个为您删除行的函数。
此代码将显示删除的工作原理:
Private Sub Command104_Click()
Dim MyData() As Integer
Dim i As Integer
ReDim MyData(1 To 5)
For i = 1 To 5
MyData(i) = i * 100
Next i
Call MyDisplay(MyData)
' delete 3rd row
Call MyDelete(MyData, 3)
Call MyDisplay(MyData)
End Sub
Public Sub MyDelete(v() As Integer, intPos As Integer)
Dim numRows As Integer
Dim i As Integer
numRows = UBound(v)
' move every row down one
For i = intPos To numRows - 1
v(i) = v(i + 1)
Next i
' get rid of last row
ReDim Preserve v(1 To numRows - 1)
End Sub
Public Sub MyDisplay(v() As Integer)
Dim i As Integer
For i = 1 To UBound(v)
Debug.Print i, "--->", v(i)
Next i
End Sub
输出:
1 ---> 100
2 ---> 200
3 ---> 300
4 ---> 400
5 ---> 500
1 ---> 100
2 ---> 200
3 ---> 400
4 ---> 500