循环遍历工作簿中的每个工作表

时间:2014-10-27 21:44:03

标签: excel vba loops excel-vba worksheet

我正在尝试遍历工作簿中的每个工作表,但它无法正常工作。我认为这是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

1 个答案:

答案 0 :(得分:1)

对于With语句,您需要在每次希望使用.引用该对象时继续,以便按照您的意图使用它。 但是,如果我了解你的内心,我认为最简单的解决方案是添加这行代码:

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语句。

希望有道理......