我创建了两个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中有一个类似的问题,但在我看来,这个问题和答案似乎都比我原来的解决方案还要优雅。
我唯一要更改的是将已替换的行存储在变量中,而不是最后一行的占位符中。