VBA删除工作表不起作用

时间:2018-02-26 19:53:39

标签: excel vba excel-vba

我有以下功能可以同时使用多个工作簿:

 Public Property Get SPATH() As String


SPATH = ThisWorkbook.Path & "\"

Function GETIMPORTFILE(Index As Long) As String

    Select Case Index

        Case 1: GETIMPORTFILE = "New Leave.xlsx"
        Case 2: GETIMPORTFILE = "Return To Work.xlsx"

    End Select

End Function

然后我在这个循环上工作,从那些不必要的表格中删除表格名称。

Sub delete_extra_Sheets()

    Dim n As Long
    Dim strImportFile As String

    For n = 1 To 2 Step -1

        strImportFile = SPATH & GETIMPORTFILE(n)

        With Workbooks.Open(strImportFile)

            If n = "Segments" Or n = "Summary" Then
                Application.DisplayAlerts = False
                    Sheets(n).Delete
                Application.DisplayAlerts = True
            End If

        End With

    Next n

End Sub

但是,我的代码无效。我没有得到错误,或任何地方调试。它只是不会开火。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

删除循环的Step -1

在我们在循环中创建另一个循环时添加ws的新声明 - 这将循环遍历工作簿中的工作表。

Sub delete_extra_Sheets()

    Dim n As Long, ws As Worksheet  '<-- New declaration
    Dim strImportFile As String

    For n = 1 To 2

        strImportFile = SPATH & GETIMPORTFILE(n)

        With Workbooks.Open(strImportFile)

            For Each ws In .Worksheets
                Application.DisplayAlerts = False

                Select Case ws.Name
                    Case "Segments", "Summary"
                        ws.Delete
                End Select

                Application.DisplayAlerts = True
            End If

        End With

    Next n

End Sub

答案 1 :(得分:2)

如果我理解您正在尝试做什么,以下代码可能适合您:

Sub delete_extra_Sheets()

    Dim n As Long
    Dim i As Long
    Dim strImportFile As String
    Dim wbTarget As Workbook


    For i = 1 To 2

        strImportFile = SPATH & GETIMPORTFILE(i)


        wbTarget Workbooks.Open(strImportFile)

        If wbTarget Is Nothing Then

            For n = wbTarget.Worksheets.Count To 1 Step -1

                If wbTarget.Worksheets(n).Name = "Segments" Or wbTarget.Worksheets(n).Name = "Summary" Then
                    Application.DisplayAlerts = False
                    wbTarget.Worksheets(n).Delete
                    Application.DisplayAlerts = True
                End If
            End If

            wbTarget.Close True
        End If
    Next i
End Sub

在这里,我将遍历您拥有的所有工作簿(根据GERTIMPORT过程,此案例2)。

然后,我循环遍历工作簿中的每个工作表,并使用n(索引)查找名称并将其与Segments amd Summary进行比较。如果是,我会删除它们。

试试