将一个工作表中的列插入另一个工作表

时间:2014-06-02 14:56:23

标签: excel vba excel-vba

我目前正在尝试将“旧”工作表中的4列复制到“当前”工作表中。这是我当前的代码:

Sub PasteData()

Sheet3.Range("J1:M252").Copy

Sheet1.Range("J1:M252").Insert Shift:=xlShiftToRight

Application.CutCopyMode = False

Sheet1.Range("J253:J462").Offset(ColumnOffset:=4).Insert Shift:=xlShiftToRight

'Inserts the comments from the "Old" sheet

End Sub

这样可以很好地复制和粘贴列,但它正在替换“当前”文件的4列中当前具有的数据。我想做到这一点,以便那些列中被替换的所有内容都向右移动。谢谢。

修改 我遇到了一个问题。我把列粘贴得很好,但仍然有数据没有向右移动。我计划在第252行之后将列J-M留空。我想将J253:Y282(突出显示的单元格)从N-AC列向右移动。我插入了一张图片以便更好地描述。

enter image description here

1 个答案:

答案 0 :(得分:2)

这对我有用(经过测试):

Sub copyColumns()
    Dim rOrigin As Range, rDestination As Range
    Set rOrigin = Sheets("Old").Range("J1:M252")
    Set rDestination = Sheets("Current").Range("J1")
    rOrigin.Copy
    rDestination.Insert Shift:=xlShiftToRight
    Application.CutCopyMode = False
End Sub

或用更少的行

Sub copyColumns()
    Sheets("Old").Range("J1:M252").Copy 
    Sheets("Current").Range("J1").Insert Shift:=xlShiftToRight
    Application.CutCopyMode = False
End Sub

我建议using the sheet code name instead of its (actual) name,因为如果有人更改了工作表名称,代码就会停止工作。

工作表代码名称在项目资源管理器中查看,并且为Sheet1, Sheet2, etc。因此Sheet1.RangeSheets("Old").Range更强大。

此外,Selections are considered bad practice and it is better that they are avoided.

我希望这有帮助!

修改

跟进您的修改,如果您现在想要从J253开始并将插入的列移至N,您可以执行此操作 Sheets("Current").Range("N253").Insert Shift:=xlShiftToRight或者

Sheets("Current").Range("J253").Offset(columnOffset:=4).Insert Shift:=xlShiftToRight

但真正的问题是,您何时停止在相同的行范围内插入并向下移动,以及每次要插入多少行。如果您尝试自动执行繁琐的复制粘贴,您可能还会一直自动化它!!

最初:

enter image description here

一次迭代后:

enter image description here

经过两次迭代:

enter image description here