首页 > 解决方案 > 如何从VBA中的任何位置从动态数组中删除一个值?

问题描述

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

标签: ms-accessvba

解决方案


没有内置函数可以从数组中删除。因此,唯一的方法是将每个值“拉”一个,然后重新变暗以删除最后一个值。

阵列可以追溯到 1970 年代末和 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 

推荐阅读