2014-10-27 85 views
0

我試圖循環遍歷工作簿中的每個工作表,但它不工作。我認爲這是ActiveWorkbook.Worksheets不能識別每個工作表,只能在Active工作表上運行。任何建議都會很棒!我相信這是一個基本的修復,但似乎無法弄清楚。謝謝!循環遍歷工作簿中的每個工作表

Sub LoopThroughWorksheets() 
    Dim ws As Worksheet 

    For Each ws In ActiveWorkbook.Worksheets 
     If (ws.Name <> "Sheet1") And (ws.Name <> "Sheet2") And (ws.Name <> "Sheet8") And (ws.Name <> "Sheet42") Then 

      With ws 
       'code 
       'Sheets("Formula").Select 
       Range("FormulaRow").Copy 
       'Selection.Copy 
       ActiveSheet.Select 
       ActiveSheet.Range("A1").Select 
       ActiveSheet.Paste 
       Calculate 
       Range("Q1:X1").Select 
       Selection.Copy 
       Range("Q3:X3000").Select 
       Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ 
        SkipBlanks:=False, Transpose:=False 
       Application.CutCopyMode = False 
       Calculate 
       Selection.Copy 
       Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
        :=False, Transpose:=False 

      End With 
     End If 
    Next ws 

End Sub 
+0

「我認爲這是不承認每個工作表的ActiveWorkbook.Worksheets」:這是很好的有一個理論,這可能解釋的問題。爲什麼不向你的循環添加一些代碼來顯示在每次迭代中ActiveSheet實際上是在變化的呢? – MartynA 2014-10-27 21:50:56

+0

我可以看到它在每次迭代中都沒有變化,這就是我爲什麼這麼想的原因。謝謝。 – 2014-10-27 22:07:46

回答

1

對於With聲明,你需要將每個你想引用對象與.使用它你打算的方式同步進行。 但是,如果我理解你的intnent,我認爲最簡單的解決辦法是在這行代碼添加:

ws.Select 

如下:

For Each ws In ActiveWorkbook.Worksheets 
    If (ws.Name <> "Sheet1") And (ws.Name <> "Sheet2") And (ws.Name <> "Sheet8") And (ws.Name <> "Sheet42") Then 

     ws.Select 

     With ws 
      'code 
      'Sheets("Formula").Select 
      Range("FormulaRow").Copy 

     ... 

,然後你也應該改變工作的事情例如從Range("FormulaRow").Copy.Range("FormulaRow").Copy,因此您一定要正確使用With聲明。

希望是有道理的......

+0

哦,是的,這是回到我身邊。不幸的是,FormulaRow是在不同的標籤,並試圖從不是Ws標籤複製是讓我絆倒。 – 2014-10-27 22:09:11

+0

通過添加ws.Select,它不會跳過我不想執行此操作的工作表。 – 2014-10-27 22:11:09

+0

它絕對看起來像您從未激活過任何工作表,因此即使您在後臺循環訪問WS Array,原始ActiveSheet仍保持不變。 您可能想要退出。在代碼中選擇.Copy,.Paste,然後直接設置值。它使得更多的工作,並看起來馬虎,在後臺激活閃爍的所有屏幕。只要發表聲明。 表格(sheetname).Cells(iRow,iCol)=您想要設置的值 然後您可以使用iRow和iCol作爲變量,並執行各種條件檢查和循環。而不是宏觀記錄的ONE方式。 – peege 2014-10-27 22:12:22

相關問題