Excel 为什么VBA下一个不转到下一个工作表

Excel 为什么VBA下一个不转到下一个工作表,excel,foreach,vba,Excel,Foreach,Vba,所以我在这里已经看了一段时间了,我试图编写代码,在工作簿中的每个工作表中都能找到,除非这些工作表被命名为Summary、Archive或Template。当运行代码时,当我开始使用这三个名称中的任何一个,但从未进入下一个工作表时,似乎会跳过代码。(我的代码涉及到另一个工作簿以收集数据,这一点可能很重要) 以下是我所拥有的: For Each rs In ActiveWorkbook.Worksheets If rs.Name <> "Summary" And rs.Name <

所以我在这里已经看了一段时间了,我试图编写代码,在工作簿中的每个工作表中都能找到,除非这些工作表被命名为Summary、Archive或Template。当运行代码时,当我开始使用这三个名称中的任何一个,但从未进入下一个工作表时,似乎会跳过代码。(我的代码涉及到另一个工作簿以收集数据,这一点可能很重要)

以下是我所拥有的:

For Each rs In ActiveWorkbook.Worksheets

If rs.Name <> "Summary" And rs.Name <> "Archive" And rs.Name <> "Template" Then


    'my Code to do


End If
Next rs
ActiveWorkbook.工作表中每个rs的

如果rs.名称为“摘要”,rs.名称为“存档”,rs.名称为“模板”,则
“我的代码是什么
如果结束
下一个rs
非常感谢您的帮助。
谢谢

您正在使用
Activesheet
或根本没有父工作表来处理您在问题中忽略的实际处理代码。改用
rs

For Each rs In ActiveWorkbook.Worksheets
    WITH RS    '<~~ use rs
        select case lcase(.Name)
            case "summary", "archive", "template"
                'do nothing
            case else
                rs.Select    '<~~ not considered 'best practice'
                'my Code to do with stuff .Range("A1") or .Cells(1, "A") on rs
        end select
     END WITH
Next rs
ActiveWorkbook.工作表中每个rs的


有了RS',当你遇到你所描述的意想不到的事情时,我发现最好是对发生的事情进行目视检查。试试这个:-

Sub Ryan_S()

    Dim Ws As Worksheet

    For Each Ws In ActiveWorkbook.Worksheets

        Debug.Print Ws.Name

        If Ws.Name <> "Summary" And Ws.Name <> "Archive" And Ws.Name <> "Template" Then

        Debug.Print , "Executing my code"
        'my Code to do

        End If
    Next Ws
End Sub
Sub-Ryan_S()
将Ws设置为工作表
对于ActiveWorkbook.Worksheets中的每个Ws
Debug.Print Ws.Name
如果Ws.Name“Summary”和Ws.Name“Archive”以及Ws.Name“Template”,那么
Debug.Print,“执行我的代码”
“我的代码是什么
如果结束
下一个Ws
端接头
除了我对将工作表称为“rs”(在我的书中可能是一行:-)有点反感之外,代码与您的代码完全相同。但是,我添加了两行代码,将某些内容打印到即时窗口(如果默认情况下不可见,则为Ctl+G)。第一行只打印被调用的每张图纸的名称,第二行只打印一张选定的图纸


此测试将引导您找到错误。您可能会发现您循环使用了错误的工作簿(正如上面有人所建议的),或者您的代码实际上运行了,但没有达到预期的效果。初学者的一个常见错误是,在错误恢复中加入
下一步
,这可以防止代码崩溃,但不会强制它按照说明执行。

你说的“从工作表开始”是什么意思?是什么触发此代码运行?当您为迭代定义工作表列表时,是否有可能激活错误的工作簿?我尝试了您的代码,但遇到了与原始工作簿类似的问题。我的前3页是摘要、归档和模板。运行代码似乎跳过了“case else”部分三次,然后开始运行代码。但每次运行“下一个rs”时,它都停留在同一工作表上,实际上不会转到工作簿中的下一个工作表。您不希望它“转到”下一个工作表。Yopu应该能够通过直接的父工作表引用做任何你想做的事情。看见FWIW,我现在添加了一个
rs.Select
命令,但这不被认为是“最佳实践”。您是否阅读了关于“注意,当与。。。以结束在所有工作表成员前面加上。将父工作表推送到With。。。以“.”结束。不幸的是,我还是VBA新手,对术语和命令还没有很好的掌握(我第一次听说select case),我不确定您所说的父工作表是什么意思。我想我想要的是,如果工作表名为summary、archive或template,请转到下一个工作表。如果它没有被命名为这3张工作表中的任何一张,请执行代码,然后转到下一张工作表,直到它在工作簿中的所有工作表中循环