2016-02-01 5 views
-1

Я пытаюсь использовать несколько ifs для поиска определенных точек данных, а затем вставлять значение из определенного столбца в другой лист. Я получаю сообщение об ошибке 98. Любая помощь будет принята с благодарностью. Если я удалю инструкцию AND и измените ее с строк на ячейки, она отлично работает, но способ, которым я ввел И, похоже, является проблемой.Ошибка времени выполнения '91' в макросе vba

Sub Macro2() 
Dim Line As Long 
Dim NewRange As Range 
Dim MyCount As Long 
MyCount = 1 


For Line = 1 To 10000 Step 1 
    If Cells(Line, 2) = "Farm2" And Cells(Line, 12) = "new" Then 
     Set NewRange = Cells(Line, 1) 
     End If 

Next Line 

NewRange.Copy Destination:=Worksheets("Farm2").Range("B18:B" & Rows.Count).SpecialCells(xlCellTypeBlanks) 
+4

Вы пытаетесь скопировать несколько строк? Если это так, вы должны «Exit For», как только найдете совпадение. Если нет, то копия должна быть в выражении 'If' цикла. Кстати, есть лучшие способы поиска следующей доступной пустой строки, чем то, что вы сейчас используете. – Jeeped

ответ

3

Ваш код предполагает, что выполнены оба условия, и что установлен NewRange. Если условия не соблюдены, и NewRange не был установлен, последняя строка вызовет ошибку, потому что нет объекта диапазона для копирования.

Вы можете проверить это, используя что-то вроде:

If Not NewRange Is Nothing Then 
    NewRange.Copy Destination:=Worksheets("Farm2").Range("B18:B" & Rows.Count).SpecialCells(xlCellTypeBlanks) 
Else 
    MsgBox "NewRange has not been set!" 
End If 

Что еще более важно, рассмотреть Jeeped's comment о структуре кода - в частности о том, как вы работаете в вашем цикле.