【问题标题】:Copy all worksheets into one sheet将所有工作表复制到一张表中
【发布时间】:2013-09-22 03:53:31
【问题描述】:

我正在尝试编写一个 excel 宏,它将我的所有工作表复制到一个工作表中。

所有工作表的布局都相同,每行的每个单元格都有 4 列数据。每张纸都有一个标题。我正在尝试将预过滤的数据从每张表复制到结果表中,每张表中的数据将堆叠在一起。

到目前为止,这就是我所拥有的,并且几乎可以正常工作。

Dim sh As Worksheet
Dim iRows As Long

iRows = 0

For Each sh In ActiveWorkbook.Worksheets

sh.Select
Range("A1").Select
Selection.Offset(1, 0).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

Worksheets("Results").Select
Range("A1").Select
Selection.Offset(iRows, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues

iRows = Worksheets("Results").UsedRange.Rows.Count
Next sh

我的偏移量不正确,当我复制下一张工作表时,我复制了它复制到上一行的数据。

如果有人可以提供帮助,那就太好了,如果您也可以解释我在这里做错了什么,那太好了,因为我是 excel 和 VBA 的新手。我猜我不明白粘贴是如何正常工作的?

【问题讨论】:

  • 1 避免使用 .Select。请参阅此link 直接使用对象。 2 接下来看看这个link 如何找到最后一行。在源表中,您可以使用它来定义范围,在输出表中,您可以决定要写入的下一个可用行。
  • 我看到你已经选择了答案。快速提问...您可以选择忽略这一点,就像您对上述评论所做的那样:) 顶行或最后一列是否有可能有空单元格?
  • 嗨,Siddhart,对不起,我在得到你的答案之前就接受了答案!我将阅读您的链接。我现在忽略的两张额外的床单; 1. 有一个标题和一个空白行 2. 完全空白。
  • 不用担心...只要记住如果顶行或最右边的列有任何空白单元格,那么xlToRightxlDown 将不起作用...

标签: excel vba copy paste


【解决方案1】:
Sub tgr()

    Dim ws As Worksheet
    Dim wsDest As Worksheet

    Set wsDest = Sheets("Results")

    For Each ws In ActiveWorkbook.Sheets
        If ws.Name <> wsDest.Name Then
            ws.Range("A2", ws.Range("A2").End(xlToRight).End(xlDown)).Copy
            wsDest.Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues
        End If
    Next ws

End Sub

【讨论】:

  • 我设法弄清楚如何让我的代码工作。你的比我的好和清晰,所以我会给你答案。
【解决方案2】:

我设法弄明白了。我不确定我的代码是否理想,但我现在需要的代码有效。

我的工作簿中有两张空白工作表。一种称为模板,一种称为结果。我所做的是添加了 if 循环以忽略这两个页面。似乎因为存在那两张空白纸,所以我添加了额外的空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    相关资源
    最近更新 更多