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

时间:2019-04-17 21:28:35

标签: ms-access access-vba

我有一个要从中删除项目的动态数组。我知道我们可以通过将数组的大小减小1并重新对其进行删除,从而删除数组末尾的数组。但是,不管该项目在阵列上的什么位置,有没有办法从该阵列中删除该项目?

1 个答案:

答案 0 :(得分:1)

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

阵列回溯到FORTAN和GWBASIC早期语言的年代,这些语言在1970年代末和80年代初在个人计算机上很流行。大多数新语言(包括VBA)都有很多更好的选择。因为这是一种“痛苦的”方法,所以我将构建一个为您删除行的函数。

此代码将显示删除的工作方式:

replace(df, as.character(df2$lab), as.list(df2$C))

输出:

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