H3l*_*lue 13 arrays excel vba element
我有一个prLst()可变长度的全局数组.这需要在数字作为字符串"1"来Ubound(prLst).但是,当用户输入时"0",我想从列表中删除该元素.我编写了以下代码来执行此操作:
count2 = 0
eachHdr = 1
totHead = UBound(prLst)
Do
If prLst(eachHdr) = "0" Then
prLst(eachHdr).Delete
count2 = count2 + 1
End If
keepTrack = totHead - count2
'MsgBox "prLst = " & prLst(eachHdr)
eachHdr = eachHdr + 1
Loop Until eachHdr > keepTrack
Run Code Online (Sandbox Code Playgroud)
这不起作用.prLst如果元素是"0"?如何有效删除数组中的元素?
注意:这是较大程序的一部分,可在此处找到相关说明:排序行组Excel VBA宏
Edd*_*ddy 35
数组是具有一定大小的结构.您可以在vba中使用可以使用ReDim缩小或增长的动态数组,但不能删除中间的元素.从您的示例中不清楚您的数组在功能上如何工作或如何确定索引位置(eachHdr)但您基本上有3个选项
(A)为你的数组写一个自定义的'删除'函数,如(未经测试)
Public Sub DeleteElementAt(Byval index As Integer, Byref prLst as Variant)
Dim i As Integer
' Move all element back one position
For i = index + 1 To UBound(prLst)
prLst(i - 1) = prLst(i)
Next
' Shrink the array by one, removing the last one
ReDim Preserve prLst(Len(prLst) - 1)
End Sub
Run Code Online (Sandbox Code Playgroud)
(B)只需将'哑'值设置为值,而不是实际删除元素
If prLst(eachHdr) = "0" Then
prLst(eachHdr) = "n/a"
End If
Run Code Online (Sandbox Code Playgroud)
(C)停止使用数组并将其更改为VBA.Collection.集合是(唯一的)键/值对结构,您可以在其中自由添加或删除元素
Dim prLst As New Collection
Run Code Online (Sandbox Code Playgroud)