2017-07-12 57 views
0

背景

我有一个工作簿7张,但只有6个数据。所有这7张纸都有相同的结构/标题,只是最后一张纸(纸张7)是空白的。复制范围从多个工作表而不是仅仅一个工作表

我想写一个代码,将A2:J15范围内的工作表1-6的内容复制到工作表7中。我目前有一个代码,我一直用它来测试,看看它是否可以工作,但我只从一个工作表复制和粘贴代码(见下文)。有什么建议么?

在下文中,我有两个表,我想数据来自和目标板,我想对数据进行分析:

Sub sbCopyRangeToAnotherSheet() 
Sheets("Source1").Range("A1:B10").Copy 
Sheets("Source2").Range("A1:B10").Copy 
Sheets("Destination").Activate 
Range("A1:B10").Select 
ActiveSheet.Paste 
Application.CutCopyMode = False 
End Sub 
+0

请提供工作表图片,以便我们更好地了解他们的结构。这确实是一个可行的任务,非常适合VBA。 – JahKnows

+1

[不要使用'.Select' /'.Activate'](https://stackoverflow.com/questions/10714251/)。相反,使用工作表变量来做到这一点。另外,当你做第二个'.Copy'时,它会“覆盖”你的第一个'.Copy',从而否定第一行的需要。另外,在Sheet7上,我假设您不希望每次都覆盖数据,而是将其他表单中的数据块添加到新复制的信息下面? – BruceWayne

+0

如何将同一范围A2:J15从所有6张复制到第7张?这样做只会使第7张表具有第6张数据 –

回答

1

你的问题来自你试图直接复制两个项目。第二次复制呼叫将覆盖您在第一次呼叫中复制的数据。

Sheets("Source1").Range("A1:B10").Copy 
Sheets("Destination").Activate 
Range("A1:B10").Select 
ActiveSheet.Paste 

Sheets("Source2").Range("<your new range here>").Copy 
Sheets("Destination").Activate 
Range("<your new range here>").Select 
ActiveSheet.Paste 
Application.CutCopyMode = False 

上面的代码应该解释我的意思,尽管不是最有效的方法。一个更有效的方法是使用:

Sheets("Source1").Range("A1:B10").Copy Destination:=Sheets("Destination").Range("A1:B10") 

Sheets("Source2").Range("A1:B10").Copy Destination:=Sheets("Destination").Range("<range>") 
+0

谢谢@基兰, 这对我有效! 十分赞赏, 周杰伦 –

1

正如评论sugguested:

Sub sbCopyRangeToAnotherSheet() 
    Sheets("Source1").Range("A1:B10").Copy Sheets("7").Range("A1") 
    Sheets("Source2").Range("A1:B10").Copy Sheets("7").Range("A1").end(xlDown).offset(1,0) 
    Sheets("Source3").Range("A1:B10").Copy Sheets("7").Range("A1").end(xlDown).offset(1,0) 
    Sheets("Source4").Range("A1:B10").Copy Sheets("7").Range("A1").end(xlDown).offset(1,0) 
    Sheets("Source5").Range("A1:B10").Copy Sheets("7").Range("A1").end(xlDown).offset(1,0) 
    Sheets("Source6").Range("A1:B10").Copy Sheets("7").Range("A1").end(xlDown).offset(1,0) 
End Sub 
+0

您好@Kiralancer,我试过这个代码,你有建议,我得到一个错误,说'下标超出范围' - Sub sbCopyRangeToAnotherSheet() 表(“来源1“)。范围(”A1:J15“)。复印纸(”7“)。范围(”A1“) –

+0

什么是纸张名称和范围。以上范围只是从你的。 – Kiralancer

0

假设你想行(而不是覆盖它)将数据粘贴,和你的床单被命名为源1至Source6,那么下面应该工作:

Sub testSO() 

For i = 1 To 6 
    Sheets("Source" & i).Range("A1:B10").Copy Sheets("Destination").Range("A" & Rows.Count).End(xlUp).Offset(1) 
Next i 

End Sub 
+0

嗨@idktho 我得到它说:“下标越界”因为同样的错误; (1) (“Source”&i).Range(“A1:J15”)。Copy Sheets(“Destination”)。Range我唯一改变的就是范围。 –

+0

Hi @JaySterling,请检查工作表名称是否正确并存在,并且它是活动工作簿(如果打开它,请关闭其他工作簿)。另外,“Source”和“1”之间是否有间隔? – idktho

相关问题