2014-09-08 2 views
1

Я пытаюсь использовать Application.Match, чтобы удалить ряд строк из электронной таблицы, прежде чем использовать оставшиеся строки для редактирования существующей электронной таблицы. Вот код, который я использую, что дает мне ошибку несоответствия типа. Я использовал подобную логику с меньшими наборами данными ранее и не имели проблемы:Ошибка несоответствия типа Application.Match в макросе VBA

If IsError(Application.Match(Fund_Inv_Cusip_Change(LineNumber), Fund_Inv_Cusips_to_Edit, 0)) Then 
     If DeletionRange Is Nothing Then 
      Set DeletionRange = Cells(Override_Workbook_Line + 3, 1).EntireRow 
     Else 
      Set DeletionRange = Union(DeletionRange, Cells(Override_Workbook_Line + 3, 1).EntireRow) 
     End If 
    End If 
Next LineNumber 
DeletionRange.Delete Shift:=xlUp 
Set DeletionRange = Nothing 

Fund_Inv_Cusips_to_Edit объявлен массив с 66,124 записями, объявленный в виде строки. FUnd_Inv_Cusip_Change - это массив с 3329 элементами, объявленными как строка. Использование print (typename (fund_inv_cusips_to_edit()) в окне Immediate возвращает String() для каждого массива, поэтому я не уверен, почему это несоответствие типа.

Любая помощь была бы очень благодарна. много постов на этом форуме и других и не видел то, что непосредственно адресует этот вопрос. Спасибо!

+0

Что относительно '? TypeName (LineNumber)' –

ответ

1

Application.Match может принимать только 65536 элементов массива во втором аргументе. в Immediate Window

?application.match(1,range("A1:A65536").Value,false) 

нет ошибок

?application.match(1,range("A1:A65537").Value,false) 

тип несоответствие ошибка.

Вы можете петли. Это не очень эффективно, но это может быть быстрее, чем вы думаете. Или вы можете поместить его в отключенный набор записей, но для загрузки может потребоваться больше времени, чем просто цикл.