Ms access 如何从VBA中的任何位置删除动态数组中的值?
我有一个要从中删除项目的动态数组。我知道我们可以从数组末尾删除一个项目,方法是将其大小减小1并重新命名。但是,有没有一种方法可以从数组中删除项目,而不管该项目在数组中处于什么位置?没有内置函数可以从数组中删除。因此,唯一的方法是将每个值向下“拉”一,然后重新调暗以删除最后一个值 数组可以追溯到20世纪70年代末和80年代初在个人计算机上流行的FORTAN和早期GWBASIC语言的旧时代。大多数新语言(包括VBA)都有更好的选择。因为这是一种“痛苦”的方法,所以我将构建一个函数来为您删除该行 此代码将显示删除是如何工作的:Ms access 如何从VBA中的任何位置删除动态数组中的值?,ms-access,vba,Ms Access,Vba,我有一个要从中删除项目的动态数组。我知道我们可以从数组末尾删除一个项目,方法是将其大小减小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
可以从数组元素中删除值,但元素仍然存在,不调整大小。可能要使用集合而不是数组。我尝试使用collection,但在网上找不到任何可以在不知道其密钥的情况下删除collection项的方法。我在这里为它制作了一个不同的线程:我为你的收集问题发布了一个工作示例-我建议你使用它,但我也为数组()发布了一个工作解决方案,但如果可能,我会尽量避免使用数组。谢谢@AlbertD.Kallal。我决定使用Collectionarray,当然它仍然有用。数组的一个优点是,可以直接从记录集中填充数组。因此,您可以将整个表直接拉入一个数组,而不需要循环(并且可以得到带列的行(矩阵)。因此,阵列并没有消亡,这实际上取决于特定的用例。最终取决于一个人试图实现的目标。因此,虽然阵列通常很难使用,但其中一些可能会让我们的开发人员变得越来越懒惰。许多可以追溯到FORTAN的系统在没有集合的情况下运行了多年。