Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 循环浏览工作簿中的每个工作表_Vba_Loops_Excel_Worksheet - Fatal编程技术网

Vba 循环浏览工作簿中的每个工作表

Vba 循环浏览工作簿中的每个工作表,vba,loops,excel,worksheet,Vba,Loops,Excel,Worksheet,我试图循环浏览工作簿中的每个工作表,但它不起作用。我认为是活动工作簿。工作表无法识别每个工作表,只能在活动工作表上运行。任何建议都很好!我相信这是一个基本的修复,但似乎无法解决它。谢谢 Sub LoopThroughWorksheets() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets If (ws.Name <> "Sheet1") And (ws.Name <>

我试图循环浏览工作簿中的每个工作表,但它不起作用。我认为是活动工作簿。工作表无法识别每个工作表,只能在活动工作表上运行。任何建议都很好!我相信这是一个基本的修复,但似乎无法解决它。谢谢

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
子循环工作表()
将ws设置为工作表
对于ActiveWorkbook.Worksheets中的每个ws
如果(ws.Name“Sheet1”)和(ws.Name“Sheet2”)以及(ws.Name“Sheet8”)和(ws.Name“Sheet42”),则
与ws
“代码
'表格(“公式”)。选择
范围(“公式行”)。副本
'选择。复制
活动表。选择
ActiveSheet.Range(“A1”)。选择
活动表。粘贴
算计
范围(“Q1:X1”)。选择
选择,复制
范围(“Q3:X3000”)。选择
Selection.Paste特殊粘贴:=xlPasteFormulas,操作:=xlNone_
SkipBlanks:=False,转置:=False
Application.CutCopyMode=False
算计
选择,复制
Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
以
如果结束
下一个ws
端接头

对于
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

        ...
ActiveWorkbook.工作表中每个ws的

如果(ws.Name“Sheet1”)和(ws.Name“Sheet2”)以及(ws.Name“Sheet8”)和(ws.Name“Sheet42”),则
ws.Select
与ws
“代码
'表格(“公式”)。选择
范围(“公式行”)。副本
...
然后,您还应该努力更改内容,例如从
范围(“FormulaRow”)。将
复制到
范围(“FormulaRow”)。复制
,以便确保正确使用
With
语句


希望这是有意义的…

“我认为这是活动工作簿。工作表无法识别每个工作表”:最好有一个理论来解释这个问题。为什么不在循环中添加一些代码来显示ActiveSheet是否在每次迭代中都在更改?我可以看到它在每次迭代中都没有更改,这就是我为什么这么想的原因。谢谢。哦,是的,我想起来了。不幸的是,FormulaRow位于另一个选项卡上,尝试从非ws选项卡复制会让我大吃一惊。通过添加ws.Select,它不会跳过我不想在其上执行操作的工作表。看起来您肯定从未激活过任何工作表,因此,即使您在后台循环遍历WS数组,原始ActiveSheet仍然保持不变。您可能想退出。选择、.Copy、.Paste在代码中,然后直接设置值。它做了更多的工作,而且在所有的屏幕都在后台闪烁的情况下看起来很邋遢。只需发表声明。Sheets(sheetname).Cells(iRow,iCol)=要设置的值,然后可以使用iRow和iCol作为变量,并执行各种条件检查和循环。如果公式行位于不同的工作表上,则宏记录的不是单向。指定它。表格(“公式表”)。范围(“公式表行”)