Скопируйте формулу снизу или сверху
Ваш код делает именно то, что он должен делать, но не то, что вы хотите.
Упрощенный пример текущего кода
Для rowvalue = 7
Ячейка J6
содержит =A6
Ячейка J7
содержит =A7
ЯчейкаJ8
содержит =A8
Когда вы вставляете строку, ячейка J6
остается прежней, ячейка J7
пуста, предыдущая ячейка J7
перемещена на строку ниже (J8
) и содержит=A8
и предыдущая ячейка J8
переместились на строку ниже (J9
) и содержат =A9
.
Теперь при применении .Resize(2)
диапазон будет J7:J8
(вставлена пустая ячейка и предыдущаяJ7
ячейка, теперь J8
ячейка).Теперь вы берете формулу J8
, которая равна =A8
, и записываете ее в J7
, и она остается =A8
, а формула в следующей строке (J8
) становится =A9
, что не соответствует вашим ожиданиям..
Решение 1
Вы можете Copy
ячейка из строки ниже, что скопирует формулу.
Sub CopyCell1()
Const rowvalue As Long = 7
Rows(rowvalue).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Cells(rowvalue + 1, 10).Copy Destination:=Cells(rowvalue, 10)
' Or simply:
'Cells(rowvalue + 1, 10).Copy Cells(rowvalue, 10)
End Sub
Решение 2
Если вы настаиваете на использовании Resize
, вам нужно добавить Offset
к предыдущей ячейке (ячейка выше) и затем «применить» Resize
и напишите формулу из указанной выше ячейки (например, J6
), начиная с указанной выше ячейки (например, =A6
).
Sub CopyCell2()
Const rowvalue As Long = 7
Rows(rowvalue).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Cells(rowvalue, 10).Offset(-1).Resize(2).Formula _
= Cells(rowvalue - 1, 10).Formula
End Sub