【问题标题】:VBA - Loop Through All Sheets And Exclude OneVBA - 遍历所有工作表并排除一个
【发布时间】:2018-04-25 21:14:20
【问题描述】:

我需要在工作簿中的所有工作表上执行完全相同的任务,除了一张,我有以下代码,但出现以下错误:

End If 没有 Block If

    Sub Servers3_DeleteIrrelevantColumns()

    'Initialize variables
    Dim currentColumn As Integer
    Dim columnHeading As String
    Dim wrkSht As Worksheet

    'Rename headers on all sheets if matched

        If wrkSht.Name <> "New Servers" Then
    For Each wrkSht In ActiveWorkbook.Worksheets

            wrkSht.Cells(1, 1).EntireRow.Replace What:="*ServerName*", Replacement:="Server Name", Lookat:=xlWhole

            For currentColumn = wrkSht.UsedRange.Columns.Count To 1 Step -1

                columnHeading = wrkSht.UsedRange.Cells(1, currentColumn).Value

                'Check whether to keep column
                Select Case columnHeading

                    Case "Server Name"

                    'Do nothing

                    Case Else

                    wrkSht.Columns(currentColumn).Delete

                End Select

            Next

        End If

End Sub

【问题讨论】:

  • 您在第一个 For Each 循环(直接在 Next 之后和 End If 之前)缺少一个 Next
  • For Each wrkSht In ActiveWorkbook.Worksheets 你没有End For
  • 您的If wrkSht.Name &lt;&gt; "New Servers" Then 条件应该在您的For Each wrkSht In ActiveWorkbook.Worksheets 循环中,因为在该循环之外,wrkSht 只是一个Worksheet 对象并且不指向工作表
  • @Zac 是正确的,加上@peh 指出的缺少的next。您需要在for each sh 之后的if sheet&lt;&gt;"name" thennext sh 之前的end if
  • 抱歉,我将“撤消”更改并发布解决方案。

标签: vba excel


【解决方案1】:

这是我的问题的有效解决方案:

Sub Servers3_DeleteIrrelevantColumns()

    'Initialize variables
    Dim currentColumn As Integer
    Dim columnHeading As String
    Dim wrkSht As Worksheet

    'Rename headers on all sheets if matched

    For Each wrkSht In ActiveWorkbook.Worksheets

        If wrkSht.Name <> "New Servers" Then

            wrkSht.Cells(1, 1).EntireRow.Replace What:="*ServerName*", Replacement:="Server Name", Lookat:=xlWhole

            For currentColumn = wrkSht.UsedRange.Columns.Count To 1 Step -1

                columnHeading = wrkSht.UsedRange.Cells(1, currentColumn).Value

                'Check whether to keep column
                Select Case columnHeading

                    Case "Server Name"

                    'Do nothing

                    Case Else

                    wrkSht.Columns(currentColumn).Delete

                End Select

            Next

        End If

    Next wrkSht

End Sub

【讨论】:

    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2022-01-19
    相关资源
    最近更新 更多