Не проверено.
Поскольку вы копируете только значения, имеет смысл пропустить буфер обмена и просто присвоить значения непосредственно целевому диапазону.
Set WbPort(n) = Workbooks.Open(Portfolio(n))
Dim rangeToCopy as range
Set rangeToCopy = WbPort(n).Worksheets(1).Range("A2:O101")
With WbTarget.Worksheets(1)
.Range("C" & .Range("AN" & n + 2).value2).resize(rangeToCopy.rows.count, rangeToCopy.columns.count).value2 = rangeToCopy.value2
End with
WbPort(n).Close SaveChanges:=False
Если этоработает для вас, но вы все еще хотите исправить свой существующий код, возможно, стоит попробовать:
Set WbPort(n) = Workbooks.Open(Portfolio(n))
WbPort(n).Worksheets(1).Range("A2:O101").Copy
With WbTarget.Worksheets(1)
.Range("C" & .Range("AN" & n + 2).value2).PasteSpecial xlPasteValues
End with
Application.CutCopyMode = False
WbPort(n).Close SaveChanges:=False
Или вместо xlPasteValues
попробуйте другой xlPasteType
(https://docs.microsoft.com/en-us/office/vba/api/excel.xlpastetype) например xlPasteAll
просточтобы увидеть, получаете ли вы еще изображение.
Кроме того, вы, кажется, вставляете номер строки, определяемый значением в Range("AN" & n + 2)
первого листа WbTarget
- где n
- это некотороепеременная (возможно, в цикле?). Я бы присвоил значение в Range("AN" & n + 2).value2
переменной типа long
и проверил бы, что вы вставляете правильный адрес диапазона / ячейки.