【问题标题】:excel 2007 Copy the same range from multiple sheets and paste to current sheetexcel 2007 从多个工作表复制相同范围并粘贴到当前工作表
【发布时间】:2014-01-26 23:46:57
【问题描述】:

vba 新手,我到处查看,尝试了一些已发布的宏并为我修改了它们,但没有任何东西能完美运行,我感到很沮丧,求助。 我需要从多个工作表中复制一系列值并将这些范围粘贴到一张工作表中。 第一张表(总计)将包含宏(作为按钮)。工作表 1 之后的每张工作表都代表一名员工,因此每张工作表的名称就是他们的姓名。随着员工的进出,床单的数量会不时变化。我需要复制的范围对于所有员工都是相同的(N5:V400)。尽管包含该范围内的值的行数会因员工而异。 我还需要复制每个工作表(单元格 Q2)中的员工姓氏,并将其粘贴为粘贴到总计工作表中的每一行的前导单元格。

因此,当宏运行时,每个员工表中的单元格 Q2(Name) 和范围 N5:V500 中的任何值都会粘贴到总计表范围 A3:J5000 中(有两个标题行)。该名称需要粘贴到为每个员工粘贴的每一行的第一个单元格中。

我敢肯定这是一个简单的代码,但话又说回来,我当然没有资格说。 感谢所有可以提供帮助的人。

【问题讨论】:

  • 如果能至少提供数据前后的屏幕截图就好了?读长段有时让我头晕...@_@
  • 我已经发布了答案,请在运行代码之前保存一份工作簿副本。还要确保Totals 表具有相同的确切名称。

标签: excel vba


【解决方案1】:

在这里,试试这个:

久经考验:

Option Explicit
Sub test()

Dim ws As Worksheet, wsTotals As Worksheet
Dim lrow As Long

Set wsTotals = ThisWorkbook.Sheets("Totals")

For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Totals" Then
        lrow = ws.Range("N" & Rows.Count).End(xlUp).Row
        If lrow > 4 Then
            ws.Range("N5:V" & lrow).Copy wsTotals.Range("B" & Rows.Count).End(xlUp).Offset(1, 0)
            ws.Range("Q2").Copy wsTotals.Range(wsTotals.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Address, _
                wsTotals.Range("A" & Rows.Count).End(xlUp).Offset(lrow - 4, 0).Address)
        End If
    End If
Next ws

End Sub

应该这样做。
希望这对你有用。
它正在工作,但没有时间做很多测试。

【讨论】:

  • 首先谢谢!,在员工完全没有任何数据之前,它运行良好。然后它将第一个空表员工的姓名粘贴到带有数据的员工的姓氏上,然后将空白表的标题粘贴到下一行。
  • 好的,看看我的编辑。但是确保每个 Employee 至少有一个标题,否则还不如删除工作表?但它甚至可以使用空工作表。
猜你喜欢
  • 1970-01-01
  • 2015-12-27
  • 2018-08-08
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
相关资源
最近更新 更多