Хранение данных буфера обмена Excel в переменной или объекте данных - PullRequest
0 голосов
/ 12 июня 2019

Я создал два макроса Excel Move_Entry_Down и Move_Entry_Up.Цель состоит в том, чтобы поменять местами строки, охватываемые текущим выделением, строкой над или под ней.

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

Есть ли способ сохранить все значения, формулы и форматы внекоторые объекты данных для «вставки специальных» позже.Я хочу, чтобы формулы обновлялись относительно их новой позиции после вставки.

Ниже приведен код макроса:

Sub Move_Entry_Down()
    act_cell_col = ActiveCell.Column
    act_cell_row = ActiveCell.Row
    sel_row_1 = Selection.Rows(1).Row
    sel_row_n = Selection.Rows.count + sel_row_1 - 1
    sel_col_1 = Selection.Columns(1).Column
    sel_col_n = Selection.Columns.count + sel_col_1 - 1
    last_row = ActiveSheet.UsedRange.Rows.count

    Range(sel_row_n + 1 & ":" & sel_row_n + 1).Copy
    Rows(last_row + 1).PasteSpecial (xlPasteAll)
    Range(sel_row_1 & ":" & sel_row_n).Copy
    Rows(sel_row_1 + 1 & ":" & sel_row_n + 1).PasteSpecial (xlPasteAll)
    Rows(last_row + 1 & ":" & last_row + 1).Copy
    Rows(sel_row_1 & ":" & sel_row_1).PasteSpecial (xlPasteAll)
    Rows(last_row + 1).Delete

    ActiveSheet.UsedRange

    Range(Cells(sel_row_1 + 1, sel_col_1), Cells(sel_row_n + 1, sel_col_n)).Select

End Sub

и ...

Sub Move_Entry_Up()
    act_cell_col = ActiveCell.Column
    act_cell_row = ActiveCell.Row
    sel_row_1 = Selection.Rows(1).Row
    sel_row_n = Selection.Rows.count + sel_row_1 - 1
    sel_col_1 = Selection.Columns(1).Column
    sel_col_n = Selection.Columns.count + sel_col_1 - 1
    last_row = ActiveSheet.UsedRange.Rows.count

    Range(sel_row_1 - 1 & ":" & sel_row_1 - 1).Copy
    Rows(last_row + 1).PasteSpecial (xlPasteAll)
    Range(sel_row_1 & ":" & sel_row_n).Copy
    Rows(sel_row_1 - 1 & ":" & sel_row_n - 1).PasteSpecial (xlPasteAll)
    Rows(last_row + 1 & ":" & last_row + 1).Copy
    Rows(sel_row_n & ":" & sel_row_n).PasteSpecial (xlPasteAll)
    Rows(last_row + 1).Delete

    ActiveSheet.UsedRange

    Range(Cells(sel_row_1 - 1, sel_col_1), Cells(sel_row_n - 1, sel_col_n)).Select

End Sub

Естьаналогичный вопрос в этой теме но, на мой взгляд, и вопрос, и ответ кажутся еще менее изящными, чем мое первоначальное решение.

Единственное, что я хочу изменить, - это сохранение смещенной строки в переменнойвместо заполнителя последнего ряда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...