2016-03-08 2 views
0

Я использую цикл for для создания массива, содержащего допустимые порядковые номера, которые затем будут использоваться в качестве критериев поиска для другой таблицы запросов. Следующий цикл ищет каждый номер заказа в ранее созданном массиве и удаляет строку, если она не находится в массиве. Я хотел бы знать, почему я получаю ошибку несоответствия типа в строке условной инструкции функции поиска. Я попытался объявить массив как вариант, так и массив с отдельными строковыми элементами. Вот укороченный код, спасибо в продвинутом!Что вызывает несоответствие типа массива?

Sub VistaArray() 
Dim n As Integer, lastrow As Integer, ordern As String, vista() As Variant 
'ADDING NEW ELEMENTS TO ORDER NUMBER ARRAY 
For n = 2 To lastrow 
    i = n - 2 
    ReDim Preserve vista(i) 
    ordern = Worksheets(Sheet1).Cells(n, 1).Value 
    vista(i) = ordern 
Next n 

'REMOVING LINES FROM SECOND TABLE THAT AREN'T IN THE ARRAY 
lastrow = Worksheets(Sheet2).Range("A1").End(xlDown).Row 
For n = 2 To lastrow 
    ordn = ActiveSheet.Cells(n, 1).Value 
    If IsInArray(ordn, vista) Then 
    Else 
     '...REMOVE LINE FROM QUERY TABLE... 
    End If 
Next n 
End Sub 

Function IsInArray(ordn As String, vista As Variant) As Boolean 
IsInArray = (UBound(Filter(ordn, vista)) > -1) '***ERROR OCCURS ON THIS LINE*** 
End Function 
+0

Извините, я вырезал беспорядок для этого сообщения и удалил строку, где я объявил массив как вариант, не понимая, что это ключевая информация. Я добавил эту строку в сообщение. – Diego

+1

'ordn' - это строка, а не массив. 'Фильтр' ожидает массив. Возможно, вам нужно переключить порядок двух аргументов на «Фильтр». –

+0

Хорошо, что объясняет это. У меня были переменные. «vista» - это массив. Спасибо, и извините за пустую трату времени. – Diego

ответ

0

Функция Filter ожидает массив для первого аргумента и строка за ее секунду. У вас это изменилось. Должно быть выполнено следующее:

Function IsInArray(ordn As String, vista() As Variant) As Boolean 
    IsInArray = (UBound(Filter(vista, ordn)) > -1) 
End Function 
+0

Да, это было упомянуто в предыдущем комментарии, оказалось, что я сделал неправильно. Я ценю ответ! – Diego

+0

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

Смежные вопросы