Несколько возможных причин здесь:
Ваши ссылки для цикла Результаты1 , но ссылки на ваши копии Результаты (опечатка? Или причина маршрута?)
В ваших Set NextRow =
ссылочных строках .Cells(Rows.Count,
без оговорок, Строки относятся к активному листу, а не "searchresult"
листу. Вероятно, не то, что вы намеревались, но и в этом случае не будет никакой разницы.
Аналогично Range(Results(i1))
относится к активному листу, может быть в порядке - зависит от более широкого контекста вашего приложения
Я подозреваю, что ваша непосредственная проблема заключается в том, что NextRow
не было DIM
'd. Попробуйте добавить
Dim NextRow as Range
на ваш суб
Как правило, рекомендуется использовать Option Explicit
(первая строка в вашем модуле). Это вызывает явное объявление всех переменных.
EDIT
на основе вашего редактирования ошибка "Method 'Range' of object '_Global' failed"
может быть вызвана неверной адресной строкой
Ваш первый код был фактически лучше, чем ваш второй. Вот версия рефактора
Sub zxx()
Dim Results1(0 To 1) As Variant
Dim i1 As Long
Dim NextRow As Range
Dim shProperties As Worksheet
Dim shSearchResults As Worksheet
' other code ...
Set shSearchResults = ActiveWorkbook.Worksheets("searchresult")
Set shProperties = ActiveWorkbook.Worksheets("properties")
On Error Resume Next
For i1 = LBound(Results1) To UBound(Results1)
Set NextRow = shSearchResults.Cells(shSearchResults.Rows.Count, 1).End(xlUp).Offset(1, 0)
shProperties.Range(Results1(i1)).EntireRow.Copy NextRow
Next i1
End Sub
Чтобы обнаружить неправильные адреса, попробуйте добавить On Error Resume Next
перед For и
If Err.Number <> 0 Then
Err.Clear
MsgBox "Bad Address " & Results1(i1)
End If
после копирования (внутри цикла for)
EDIT2
Копирование EntireRow
в одну ячейку работает только в том случае, если одна ячейка находится в столбце A, поскольку диапазон AllRow находится над правой стороной листа.
Используйте это для смещения назад к столбцу A
Set NextRow = _
shSearchResults.Cells(shSearchResults.Rows.Count, 4).End(xlUp).Offset(1, -3)