Я думаю, что ваш цикл for не работает, потому что вы используете lCopyLastRow
там, прежде чем его определитьВы должны поместить этот бит:
Set wsCopy = Workbooks("MacroMaster file.xlsm").Sheets("MasterData")
Set wsDest = Workbooks("Prices_Database_ For_
Volume_Europe.xlsx").Sheets("MasterData")
lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row
Вне цикла for.
Также, при работе с различными рабочими листами / книгами, я бы предложил использовать wsCopy.Cells(i, 11)
и т. Д. В вашем операторе ifесли это лист, который вы просматриваете, потому что, если ваша другая рабочая книга каким-то образом активирована, она может смотреть не на ту рабочую книгу.
Также я не вижу, что делает цикл for, потому что каждый раз, когда выНайдите строку, где столбец K - это «EU», а другая ячейка - «x» (что странно, потому что вы используете последнюю переменную строки в качестве номера столбца), и вы копируете весь диапазон в нижнюю часть листа назначения.Кажется более логичным, что вам нужно копировать только 1 строку здесь.В этом случае вы должны использовать
wsCopy.Range("A" & i & ":AB" & i).Copy wsDest.Range("A" & lDestLastRow)
Наконец, когда вы обрабатываете большое количество строк, я бы предложил вообще не использовать Copy / Paste, так как это довольно медленно.Вы также можете сказать:
wsDest.Range("A" & lDestLastRow & ":AB" & lDestLastRow).Value = wsCopy.Range("A" & i & ":AB" & i).Value