我目前正在尝试将“旧”工作表中的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列向右移动。我插入了一张图片以便更好地描述。
答案 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.Range
比Sheets("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
但真正的问题是,您何时停止在相同的行范围内插入并向下移动,以及每次要插入多少行。如果您尝试自动执行繁琐的复制粘贴,您可能还会一直自动化它!!
最初:
一次迭代后:
经过两次迭代: