Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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_Excel - Fatal编程技术网

VBA删除不工作的图纸

VBA删除不工作的图纸,vba,excel,Vba,Excel,我具有以下功能,可以同时使用多个工作簿: 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

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

 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

但是,我的代码不起作用。我没有得到一个错误,或任何地方调试。它就是不点火。我做错了什么?

删除循环的
步骤-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
子删除额外工作表()

Dim n As Long,ws As Worksheet'如果我正确理解了您试图执行的操作,以下代码可能适合您:

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(索引)查找名称,并将其与摘要进行比较。如果为真,我将删除它们

试试看,不需要任何循环

Sub delete_extra_Sheets()
    Dim n As Long

    For n = 1 To 2
        With Workbooks.Open(SPATH & GETIMPORTFILE(n))
            Application.DisplayAlerts = False
            On Error Resume Next 
            .Sheets("Segments").Delete
            .Sheets("Summary").Delete 
            On Error GoTo 0 
            Application.DisplayAlerts = True
        End With
    Next
End Sub

re:
对于n=1到2步骤-1
您是指
对于n=1到2步骤1
还是
对于n=2到1步骤-1
?另外,n将是2还是1。它永远不会是段或摘要。正如Jeeped试图说的那样,for循环的内部部分不会被执行,只需按F8调试代码,你就会看到。伙计,这段代码从A到Z都是错误的。你想做什么?我试图打开两本工作簿,然后删除两张名为“摘要”和“摘要”的工作表在这两本书上。