如何从VBA中的任何位置删除动态数组中的值?

问题描述 投票:0回答:1

我有一个动态数组,我想从中删除一个项目。我知道我们可以通过减少1的大小并重新调整它来删除数组末尾的项目。但是有没有办法从阵列中删除项目,无论项目在阵列上的什么位置?

ms-access access-vba
1个回答
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 
© www.soinside.com 2019 - 2024. All rights reserved.