我是VBA的新手,我的目标是自动从3个指定的工作表(源工作表)中复制一个列(B),并将它们粘贴到一个新的工作表中,然后对C列重复此过程,直到定义一个列(我的目标见图,在这种情况下,我希望直到源工作表的D列)。所有工作表的结构都是相同的。列由数值组成。
我试着写一段代码(见下面),但是我在注解行得到了运行时错误1004。而且,不确定代码是否会做我想做的事情。我做错了什么?有什么改进的建议吗?
Sub CopyColumns3()
Dim sheetNames As Variant
sheetNames = Array("temp_column", "normalized_column", "derivative_column")
Dim columnLetters As Variant
columnLetters = Array("B", "C", "D")
Dim i As Integer
Dim j As Integer
' Create a new sheet after the last sheet in the workbook
sheets.Add After:=sheets(sheets.Count)
' Set the name of the new sheet
sheets(sheets.Count).Name = "A_final"
For i = 0 To UBound(sheetNames)
For j = 0 To UBound(columnLetters)
sheets(sheetNames(i)).columns(columnLetters(j)).Copy
' Check if there are any empty columns in the Destination sheet
If sheets("A_final").Range("A1").End(xlToRight).Column = 256 Then
' If there are no empty columns, add a new column to the end of the sheet
sheets("A_final").columns(sheets("A_final").columns.Count).EntireColumn.Insert
End If
sheets("A_final").Select
' The next line causes the problem
sheets("A_final").Range("A1").End(xlToRight).Offset(0, 1).PasteSpecial
Next j
Next i
End Sub
2条答案
按热度按时间ppcbkaq51#
复制列
mo49yndu2#
我不明白你为什么要为第256栏开支票。
但是,当它被触发时,您调用
Range.Insert
,这将清除CutCopyMode
。因此,Range.PasteSpecial
将失败,因为没有要粘贴的内容。您可以将检查移到
Range.Copy
调用之前,或者完全删除它。