Страницы: 1
RSS
Ошибка 1004 при использовании оператора For Each Next
 
Добрый день!
Имеется часть кода, которая планировалась использоваться для поиска значений одного столбца(лист 2, C:C), в другом(лист 3, A:A) и последующее копирование соответствующего второму столбцу значения из соседней ячейки в соответствующую на листе 1.
Пример:
Значение C1 на листе 2 совпало со значением A3 на листе 3. Тогда копируем с листа 3 ячейку X3 и вставляем на лист 2 в D2.
Код
Sub FormSt()
Dim ChO As Range, ChT As Range
 For Each ChO In Sheets(2).Range("C1", Cells(Rows.Count, 3).End(xlUp))
  For Each ChT In Sheets(3).Range("A1", Cells(Rows.Count, 1).End(xlUp))
   If ChT.Value = "*" & ChO.Value & "*" Then
   ChT.Offset(0, 13).Copy
   ChO.Offset(0, 2).PasteSpecial (xlPasteValues)
   End If
  Next
 Next
End Sub

ошибка возникает в строке 4.

Я понимаю, что можно попробовать обойти через тот же впр, или .Find, но хотелось бы понять причинно-следственные связи возникновения данной ошибки.
 
Код
For Each ChT In Sheets(3).Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
У вас обращение идет к активному листу в диапазоне по которому запускается цикл
Не верно
Код
For Each ChT In Sheets(3).Range("A1", Cells(Rows.Count, 1).End(xlUp)

Верно
Код
For Each ChT In Sheets(3).Range("A1", Sheets(3).Cells(Sheets(3).Rows.Count, 1).End(xlUp)

И так везде нужно прописать обращение к конкретному листу
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
DLUA написал: ошибка возникает в строке 4.
Потому что активный лист скорее всего 2 запустите с другого листа и будет ошибка в строке 3
"Все гениальное просто, а все простое гениально!!!"
 
Спасибо, заработало
Страницы: 1
Наверх