Я бы сделал это так
Function CreateTempRange(src As Range) As Range
Dim wbk As Workbook: Set wbk = Workbooks.Add
Dim sht As Worksheet: Set sht = wbk.Worksheets.Add
Call src.Copy(sht.Cells(1, 1))
Set CreateTempRange = Range(rSource.Address).Offset(1 - rSource.Row, 1 - rSource.Column)
End Function
Объяснение последней строки кода (по запросу): -
Range(rSource.Address)
- это относится к диапазону на текущем листе (содержащем код) с тем же локальным адресом, что и диапазон источника, поэтому, если диапазон источника C3: E5 на «Листе X», то Range(rSource.Address)
относится к C3: E5 на текущем листе.
Поскольку мы вставили скопированный диапазон в текущий лист, начиная с ячейки A1, а не с ячейки C3 (я полагаю, это ваше требование), нам необходимо соответствующим образом сместить эту ссылку. .Offset(1 - rSource.Row, 1 - rSource.Column)
отрицательно смещает этот диапазон как индексом строки (3) минус 1, так и индексом столбца (C или 3) минус 1 исходного диапазона, так что окончательная результирующая ссылка начинается с ячейки A1 и сохраняет те же измерения, что и диапазон источника.
Надеюсь, это поможет.