将Excel剪贴板数据存储在变量或数据对象中

时间:2019-06-12 05:06:45

标签: excel vba

我创建了两个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

this thread中有一个类似的问题,但在我看来,这个问题和答案似乎都比我原来的解决方案还要优雅。

我唯一要更改的是将已替换的行存储在变量中,而不是最后一行的占位符中。

0 个答案:

没有答案