Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel 2007从多张图纸复制相同范围并粘贴到当前图纸_Excel_Vba - Fatal编程技术网

excel 2007从多张图纸复制相同范围并粘贴到当前图纸

excel 2007从多张图纸复制相同范围并粘贴到当前图纸,excel,vba,Excel,Vba,刚接触vba时,我到处寻找,尝试了一些发布的宏,并为我修改了它们,但没有什么是完美的,我感到沮丧,救命吧。 我需要从多个工作表中复制一个范围的值,并将这些范围粘贴到一个工作表中。 第一张图纸(总计)将包含宏(作为按钮)。工作表1之后的每张工作表都代表一名员工,因此每张工作表的名称就是他们的姓名。工作表的数量会随着员工的来来去而变化。我需要复制的范围对于所有员工都是相同的(N5:V400)。尽管包含该范围内的值的行数因员工而异。 我还需要复制每个工作表(单元格Q2)中的员工姓氏,并将其粘贴为粘贴到

刚接触vba时,我到处寻找,尝试了一些发布的宏,并为我修改了它们,但没有什么是完美的,我感到沮丧,救命吧。 我需要从多个工作表中复制一个范围的值,并将这些范围粘贴到一个工作表中。 第一张图纸(总计)将包含宏(作为按钮)。工作表1之后的每张工作表都代表一名员工,因此每张工作表的名称就是他们的姓名。工作表的数量会随着员工的来来去而变化。我需要复制的范围对于所有员工都是相同的(N5:V400)。尽管包含该范围内的值的行数因员工而异。 我还需要复制每个工作表(单元格Q2)中的员工姓氏,并将其粘贴为粘贴到总计工作表中的每一行的前导单元格

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

我相信这是一个简单的代码,但我当然没有资格说。 感谢所有能帮忙的人。
在这里,试试这个:

经过尝试和测试:

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
选项显式
子测试()
将ws标注为工作表,将ws总计标注为工作表
暗淡的光线和长的一样
Set wsTotals=thiswoolk.Sheets(“总计”)
对于此工作簿中的每个ws。工作表
如果ws.Name为“Totals”,那么
lrow=ws.Range(“N”和Rows.Count).End(xlUp).Row
如果lrow>4,则
ws.Range(“N5:V”和lrow)。复制wsTotals.Range(“B”和Rows.Count)。End(xlUp)。Offset(1,0)
ws.Range(“Q2”)。复制wsTotals.Range(wsTotals.Range(“A”)和Rows.Count)。End(xlUp)。Offset(1,0)。地址_
wsTotals.Range(“A”&Rows.Count).End(xlUp).Offset(lrow-4,0).Address)
如果结束
如果结束
下一个ws
端接头
这样就可以了。
希望这对你有用。

它正在工作,但是没有时间做很多测试。

如果您至少能提供前后数据的屏幕截图,那就太好了?读长段落有时让我头晕目眩@_@我已经发布了一个答案,在运行代码之前保存工作簿的副本。还要确保
总计
表具有相同的确切名称。首先,谢谢!,在员工完全没有任何数据之前,它工作得很好。然后,用数据将雇员的姓氏粘贴到第一个空页雇员的姓名上,然后粘贴下一行空白表的标题。但要确保每个员工至少有一个标题,否则还不如删除该工作表?但即使是空纸,它也能工作。