Ошибка подъема при попытке удалить пустые значения из массива в VBA

StackOverflow https://stackoverflow.com//questions/25081003

Вопрос

Я пытаюсь запустить простую формулу для удаления пустых записей из массива.Массив, который я использую, загружен из поля в таблице данных, которые я настроил в Excel называемый TY.Название этого поля является TY [L3 номер].Я хочу сохранить этот массив Dynamic, так как он может измениться в качестве добавления пользователя или удаления строк из таблицы данных.Тестовые данные, которые я использую, имеет 218 строк, 210 из которых имеют дубликаты записей (которые я захочу удалить позже) и 8 записей «».

При запуске макроса я получаю ошибку выполнения 9 «Индекс вне диапазона» на первой строке моего заявления.

Я буквально провел часы, пытаясь понять, почему VBA дает мне эту ошибку.Мое понимание состоит в том, что это связано с массивом, который неправильно не разместел, чтобы обработать передачу данных.Я использовал окно отладки, чтобы убедиться, что оба массива размерены правильно.

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

Sub BuildArray()

'   Load array

Dim MyArr()
Dim J As Long


'   Size array

MyArr() = Range("TY[L3 Number]")
ReDim NewArr(LBound(MyArr) To UBound(MyArr))

'   For Loop to search for Blanks and remove from Array
'   The Lbound and UBound parameters will be defined by the size of the TY[L3 Number] field in the TY Table

J = LBound(MyArr) - 1 ' Added this recently while testing the theory that J may start at the 2nd      index in the loop, did not help

For i = LBound(MyArr) To UBound(MyArr)
   If MyArr(i) <> "" Then '   This is where I error out
        J = J + 1
        NewArr(J) = MyArr(i)
  End If
Next i
ReDim Preserve NewArr(LBound(MyArr) To J)

'   Debug Window to show results of revised array.

Dim c As Long
For c = LBound(NewArr) To UBound(NewArr)
   Debug.Print NewArr(c)
Next
   Debug.Print "End of List"

End Sub
.

Это было полезно?

Решение

Диапазоны являются многомерными массивами .. (I.e. Myarray (#, #) где первый индекс будет строкой и второй столбец.

Изменить

 If MyArr(i) <> "" Then 
.

к

 If MyArr(i,1) <> "" Then 
.

Если у вашего диапазона есть только один столбец, второй индекс всегда будет 1

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top