Как удалить элемент в массиве VB? - PullRequest
3 голосов
/ 04 июня 2019

Здесь я хочу удалить ключи источника '566' в TargetkyeArr() после sourcekeys находится в списке массивов.

TargetKeys = "566, 777, 888, 999, 1000"
Dim Arr() As String
TargetkeyArr() = Split(Targetkeys, ",")

Sourcekeys = 566
m = 0
Do While m <= (UBound(TargetKeyArr) - LBound(TargetkeyArr))
  If sourcekeys = Arr(m) Then
         MsgBox "Record found"
         Exit Do
   End If
m = m + 1
Loop

Ответы [ 4 ]

0 голосов
/ 04 июня 2019

Если вы хотите удалить все экземпляры значения sourceKey, вы можете использовать Filter

Dim TargetKeyArr As Variant
Dim sourceKeys As Long

TargetKeyArr = Array(566, 777, 888, 999, 1000)

sourceKeys = 566
TargetKeyArr = Filter(TargetKeyArr, sourceKeys, False)

MsgBox Join(TargetKeyArr, ", ")
0 голосов
/ 04 июня 2019

Переберите элементы по элементам и исключите значение следующим образом:

Function ExcludeAValue(Arr As Variant, Var As Variant) As Variant
    Dim Arr2() As Variant, i As Long
    ReDim Arr2(0 To 0)
    For i = LBound(Arr) To UBound(Arr)
        If Arr(i) <> Var Then
            If Not IsEmpty(Arr2(UBound(Arr2))) Then ReDim Preserve Arr2(0 To UBound(Arr2) + 1)
            Arr2(UBound(Arr2)) = Arr(i)
        End If
    Next
    ExcludeAValue = Arr2
End Function

Убедитесь, что при передаче паролей используется тот же тип данных.

Примеры:

Sub TestUsingString()
    Dim Targetkeys As String, Excludekey As String, TargetkeyArr As Variant
    Targetkeys = "566, 777, 888, 999, 1000"
    Excludekey = "566"
    TargetkeyArr = ExcludeAValue(Split(Targetkeys, ","), Excludekey)
End Sub
Sub TestUsingLong()
    Dim Targetkeys(0 To 4) As Long, Excludekey As Long, TargetkeyArr As Variant
    Targetkeys(0) = 566
    Targetkeys(1) = 777
    Targetkeys(2) = 888
    Targetkeys(3) = 999
    Targetkeys(4) = 1000
    Excludekey = 566
    TargetkeyArr = ExcludeAValue(Targetkeys, Excludekey)
End Sub
Sub BADTest()
    Dim Targetkeys As String, Excludekey As Long, TargetkeyArr As Variant
    'This one will not exclude it because 566 (long) <> "566" (string)
    Targetkeys = "566, 777, 888, 999, 1000"
    Excludekey = 566
    TargetkeyArr = ExcludeAValue(Split(Targetkeys, ","), Excludekey)
End Sub
0 голосов
/ 04 июня 2019

Попробуйте этот код:

Sub RemoveItem()
    Dim c As Collection
    Set c = New Collection
    Targetkeys = "566, 777, 888, 999, 1000"
    Dim Arr() As String
    sourcekeys = "566"
    For Each Item In Split(Targetkeys, ",")
        ' if item is different, then add it to collection
        If Item <> sourcekeys Then c.Add (Item)
    Next


End Sub
0 голосов
/ 04 июня 2019

Это должно работать:

Targetkeys = "566, 777, 888, 999, 1000"

Dim Arr() As String
Dim m As Integer

Arr() = Split(Targetkeys, ",")

sourcekeys = 566

For m = LBound(Arr) To UBound(Arr)

    If sourcekeys = Arr(m) Then

         MsgBox "Record found"

    End If

Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...