我有以下功能可以同时使用多个工作簿:
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
但是,我的代码无效。我没有得到错误,或任何地方调试。它只是不会开火。我在这里做错了什么?
答案 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进行比较。如果是,我会删除它们。
试试