2014-11-13 99 views
0

我發現這個宏,它做我需要它做但是每當它被激活它似乎複製/粘貼數據多次。我的主列表應該只有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

要跳過一個WS,在單元格A1中沒有數據,將條件更改爲:如果ws.Name <>「Master List」和isempty(ws.Range(「A1」))= False Then' – DyRuss

回答

0

您在工作簿的Private Sub Worksheet_Activate()事件中有此。如果這寫入到「主列表」表單的代碼中,則按照行cs.activate激活表單將再次觸發宏...當前正在運行的宏。很難說爲什麼這隻會造成268而不是無限的,或者是雙倍......這很難說,並且可能依賴於excel工作的速度,它是單線程或者其他深奧的Excel和VBA的奧祕。

而不是

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

嘗試

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

如果你發現自己在你的VBA代碼編寫.activate.select,你可能做一些不那麼大。

+0

你快速回復!我做了你的建議編輯,但最終的結果是一樣的。它也似乎沒有按順序複製。我要創建一個全新的工作簿,看看是否會發生同樣的情況。編輯:我想我找到了,VBA列表上的所有表都是亂序只要按順序將所有數據複製到新的工作簿中。 –

+0

牀單的順序應該沒有區別。代碼要麼循環遍歷每一張表,要麼抓取它的數據,要麼不是。編輯:我看到這是爲了您的需求是重要的。我的錯。 – JNevill

+0

跟進:同樣的事情,它會複製工作表1然後回到1 ...我不關心主工作表上數據的順序,因爲它可以被過濾,只是數據被複制 –