Копирование формулы из ячейки ниже во вновь вставленную ячейку - PullRequest
0 голосов
/ 10 февраля 2019

У меня возникает проблема, когда я пытаюсь скопировать формулу из ячейки во вновь вставленную ячейку прямо над ней.

Вот мой код VBA:

Rows(RowValue).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Cells(RowValue, 10).Resize(2, 1).Formula = Cells(RowValue + 1, 10).Formula

Позволяетскажем, что ячейка I7 имела код:

=IFERROR(IF(A7="","",INDEX(Table_TipData14[NC_STATUS],MATCH('Rack Report'!A7,Table_TipData14[SN],0))),"")

Но после первой строки моего кода VBA эта ячейка станет I8, а код внутри нее автоматически изменится на:

=IFERROR(IF(A8="","",INDEX(Table_TipData14[NC_STATUS],MATCH('Rack Report'!A8,Table_TipData14[SN],0))),"")

Это хорошо, именно это я и хочу сделать после этой строки кода VBA.

Проблема в том, что запускается вторая строка кода VBA.Это делает клетку I7, какой клеткой I8 должна быть, и делает клетку I8, какой клеткой I9 должна быть.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 10 февраля 2019

Скопируйте формулу снизу или сверху

Ваш код делает именно то, что он должен делать, но не то, что вы хотите.

Упрощенный пример текущего кода

Для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...