Excel 为什么这个宏要复制多次?

Excel 为什么这个宏要复制多次?,excel,vba,Excel,Vba,我找到了这个宏,它做了我需要它做的事情,但是每当它被激活时,它似乎会多次复制/粘贴数据。我的主列表应该只有75行左右,当它运行时,它将以268行结束。它为什么这样做?还有,有没有办法对其进行编辑,以便在A1之后,如果工作表中没有数据,则不会复制该工作表 Option Explicit Private Sub Worksheet_Activate() 'Merge all sheets in a workbook into one summary sheet (stacked) Dim cs

我找到了这个宏,它做了我需要它做的事情,但是每当它被激活时,它似乎会多次复制/粘贴数据。我的主列表应该只有75行左右,当它运行时,它将以268行结束。它为什么这样做?还有,有没有办法对其进行编辑,以便在A1之后,如果工作表中没有数据,则不会复制该工作表

Option Explicit

Private Sub Worksheet_Activate()

'Merge all sheets in a workbook into one summary sheet (stacked)
Dim cs As Worksheet, ws As Worksheet, LR As Long, NR As Long

Application.ScreenUpdating = False

Set cs = Sheets("Master List")
cs.Activate
Range("A2:F" & Rows.Count).ClearContents

For Each ws In Worksheets
    If ws.Name <> "Master List" Then
        NR = cs.Range("A" & Rows.Count).End(xlUp).Row + 1
        LR = ws.Range("A" & Rows.Count).End(xlUp).Row
        ws.Range("A2:F" & LR).copy cs.Range("A" & NR)
    End If
Next ws

Application.ScreenUpdating = True

End Sub
您可以在工作簿的专用子工作表\u激活事件中找到它。如果这写入到主列表工作表的代码中,则像使用cs.ACTIVE行一样激活工作表将再次触发宏。。。当前正在运行的。很难说为什么这只创造了268个,而不是无限的,或者说是双倍的。。。这很难说,可能取决于excel的工作速度,以及它的单一细线或excel和VBA的其他深层秘密

而不是

cs.activate
range("a2:f" & rows.count).clearcontents
试一试


如果您发现自己正在编写vba代码中的.activate或.select,您可能正在做一些不太好的事情。

要跳过单元格A1中没有数据的WS,请将条件更改为:If WS.Name Master List And isemptyws.RangeA1=False,然后感谢您的快速回复!我做了你建议的编辑,但最终结果是一样的。它似乎也没有按顺序复制。我将创建一个全新的工作簿,看看是否会发生同样的事情。编辑:我想我已经弄明白了,VBA列表中的工作表都是无序的,只要将所有数据按顺序复制到一个新工作簿中,工作表的顺序就不会有什么不同了。代码要么在每一张纸上循环,要么抓取它的数据。编辑:我知道这对你的需求很重要。我的错误。跟进:同样的事情,它会先复制第1页,然后复制第3页,然后再复制回第1页…我不关心主控页上数据的顺序,因为这是可以过滤的,只是数据会被复制,在我试图弄清楚这一点之前,必须确定,你,当然,拿出了cs.activate行。A您可以确认其中没有其他激活或选择代码吗?其他工作表中是否存在由工作表激活或任何其他类似事件触发的其他代码?@jnevil,我使用了确切的代码,将代码添加到“主列表”工作表的代码中,并按预期工作。不要被骗。
cs.range("a2.f" & rows.count).clearcontents