为什么这个宏复制多次?

时间:2014-11-13 19:33:23

标签: excel-vba vba excel

我找到了这个宏并且它完成了我需要它做的事情但是无论什么时候它被激活它似乎多次复制/粘贴数据。我的主列表应该只有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

1 个答案:

答案 0 :(得分:0)

您在工作簿的Private Sub Worksheet_Activate()事件中有这个。如果将其写入&#34;主列表&#34;工作表代码,然后像使用行cs.activate一样激活工作表将再次触发宏...当前正在运行的宏。很难说为什么这只会创造268而不是无限,或者说是双重...这很难说并且可能取决于excel工作的速度和它的单一线程或者Excel和VBA的其他一些深刻的黑暗神秘。

而不是

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

cs.range("a2.f" & rows.count).clearcontents

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