【问题标题】:Loop through all but four sheets in a workbook遍历工作簿中除四张以外的所有工作表
【发布时间】:2019-07-13 16:28:18
【问题描述】:

我有 15 张工作表,除了四张名为 graphs、print、summary 和 print 的工作表之外,我需要遍历所有工作表。

我的代码只排除了第一张而不是其他三张。

Dim Current As Worksheet

For Each Current In Worksheets 

 If Current.Name <> "Summary" And Current.Name <> "Model" And Current.Name <> "Print" And Current.Name <> "Graphs" Then

MsgBox Current.Name

Next

End Sub

我希望能够排除输出中的四张纸。 TIA

【问题讨论】:

  • 您的问题中缺少End If。也就是说,没有复制。在这里使用And 是正确的。您的实际代码中是否偶然有Or
  • 原始代码很长,我已经截断了。缺少的“End If”是一个错字。感谢您指出并为此道歉。

标签: excel vba for-loop


【解决方案1】:

这应该可行:

Sub whatever()
    Dim Current As Worksheet, c As String

    For Each Current In Worksheets
        c = Current.Name
        If c <> "Summary" And c <> "Model" And c <> "Print" And c <> "Graphs" Then
            MsgBox c
        End If
    Next
End Sub

【讨论】:

  • 如果c = Current.Name,这在逻辑上和OP有什么不同吗?
  • 这与 OP 的代码有何不同(除了 BigBen 指出的缺少的End If)?
  • 这是一个完整的、可测试的示例,并且 End If OP 代码的问题得到了纠正,最后,它更易于阅读,尤其是这里的代码示例。
  • @Steve 这仍然没有使其 在逻辑上与 OP 的代码不同。缺少的End If 很可能是拼写错误,否则代码将无法编译。修复该问题将使问题中的代码真正起作用,而不是产生所描述的行为。 IMO,当一个问题缺少 MCVE 时,我们 VTC 会使用该原因,直到 OP 提供一个原因,而不是使用基本相同的代码发布答案。 是我评论的重点(不是代码是否更易于阅读)。毕竟我可能是错的,我什至没有对答案投反对票。我只是说我的看法:)
  • @AhmedAbdelhameed 这是一个合理的意见,艾哈迈德。我只是更喜欢 Gary's Student 的答案,因为它是对问题的更好的“记录在案”答案。
【解决方案2】:
Sub Sheets_Walk()

    Dim ws As Worksheet

    For Each ws In Worksheets

        If s_in_A1(ws.Name, a1_Names) = False Then

            MsgBox ws.Name

        End If
    Next
End Sub

Function s_in_A1( _
        s As String, _
        a1 As Variant) _
        As Boolean

    Dim lCol As Long

    For lCol = LBound(a1) To UBound(a1)

        If a1(lCol) = s Then

            s_in_A1 = True

            Exit For
        End If
    Next
End Function

Function a1_Names() _
        As Variant

    a1_Names = Array("Summary", "Model", "Print", "Graphs")

End Function

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2018-11-07
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多