2016-07-19 2 views
0

Я пытаюсь сравнить один массив строк с другим, чтобы увидеть, присутствуют ли все элементы первого массива во втором. Я делаю это с помощью следующей функции:Массирование массива: Индекс из границ

Dim tempArray As Object 
    Set tempArray = CreateObject("System.Collections.ArrayList") 

    For j = 0 To maxNumberOfParts - 1 
     tempArray.Add (kitPartsArray(i, j)) 
    Next 

    j = 0 

    While UBound(partIDs) <= tempArray.Count 
     Debug.Print (UBound(partIDs) & " " & tempArray.Count & " " & LBound(partIDs)) 
     If partIDs(j) = tempArray(j) Then 
      j = j + 1 
     Else 
      tempArray.Remove (tempArray(j)) 
     End If 
    Wend 
    Debug.Print tempArray(1) 
    j = 0 
    Exists = True 
    For Each part In partIDs 
     Debug.Print tempArray(j) 
     If part <> tempArray(j) Then 
      Exists = False 
     End If 
     j = j + 1 
    Next 

    If Exists Then 
     DoesntExist = False 
     existingKits.Add (i) 
    Else 
     DoesntExist = True 
    End If 

Идея заключается в том, что он начнет с первой строки в каждом массиве и сравнить их. Если они одинаковы, они перейдут к следующей строке в каждом массиве, но если они будут разными, она удалит строку из массива temp. Затем процесс повторится с строкой, заполненной для удаленной строки. Это продолжается до тех пор, пока два массива не будут одинакового размера. Затем они сравниваются, и если они одинаковы, то все элементы первого массива должны быть в массиве temp. Тем не менее, я получаю ошибку выхода за границы на линии:

If part <> tempArray(j) Then 

(Это на самом деле происходит на Debug.Print tempArray (1) и Debug.Print tempArray (J), но когда они удалены это на оператор If)

Вы можете видеть, что оно распечатывает tempArray.Count и на последнем проходе через это. В то время как ... Wend loop, он печатает это как 2. UBound (partID) также 2. Я не могу понять, почему tempArray сокращается в этом промежутке времени, или если нет, то почему он не может получить доступ к этим элементам.

UPDATE: Когда свойство .Count находится в 2, Debug.Print tempArray (j) печатает одно значение перед отправкой ошибки. Когда .Count равно 3, он печатает два значения, а когда в 4, он печатает три значения.

+0

J 1 и .Count равно 2. – Ulthran

+0

Im уверен, что вы наклоняете использовать Debug.Print со ссылками массива итераций. Я не могу вспомнить, но я уверен, что это дало мне массивную головную боль до –

+0

. Я получаю ту же ошибку в инструкции If, когда я удаляю ее, поэтому я не думаю, что это проблема. – Ulthran

ответ

0

Я понял. Возможно, для partIDs будет больший массив, чем tempArray, и, хотя у меня были предосторожности, против которого было обратное, я не защищал это событие. Я просто должен был добавить в этом заявлении, если заставить его работать:

j = 0 
    Exists = True 
    For Each part In partIDs 
     If UBound(partIDs) < tempArray.Count Then 
      Debug.Print tempArray(j) & " New" 
      If part <> tempArray(j) Then 
       Exists = False 
      End If 
      j = j + 1 
     Else 
      Exists = False 
     End If 
    Next