如何将vba宏应用于文件夹中的所有excel文件?
我想删除多个excel工作簿上的工作表。我已经有一些VBA代码可以删除单个文件中的工作表:如何将vba宏应用于文件夹中的所有excel文件?,excel,vba,Excel,Vba,我想删除多个excel工作簿上的工作表。我已经有一些VBA代码可以删除单个文件中的工作表: Sub delete_sheet() Application.DisplayAlerts = False For Each aSheet In Worksheets Select Case aSheet.Name Case "INV." aSheet.Delete End Select Next aSheet Application
Sub delete_sheet()
Application.DisplayAlerts = False
For Each aSheet In Worksheets
Select Case aSheet.Name
Case "INV."
aSheet.Delete
End Select
Next aSheet
Application.DisplayAlerts = True
End Sub
我的文件夹中有500个文件,所有这些文件都需要删除名为“INV.”的选项卡。如何将此操作应用于文件夹中的所有文件?我已经尝试了本网站提供的示例:
子文件信息文件夹()
Dim folderName为字符串,eApp为Excel.Application,文件名为字符串
将wb设置为工作簿、ws设置为工作表、currWs设置为工作表、currWb设置为工作簿
Dim fDialog As Object:设置fDialog=Application.FileDialog(msoFileDialogFolderPicker)
Set currWb=ActiveWorkbook:Set currWs=ActiveSheet
'选择存储所有文件的文件夹
fDialog.Title=“选择一个文件夹”
fDialog.InitialFileName=currWb.Path
如果fDialog.Show=-1,则
folderName=fDialog.SelectedItems(1)
如果结束
'创建一个不可见的单独Excel进程
设置eApp=New Excel。应用程序:eApp.Visible=False
'搜索文件夹中的所有文件[将*.*替换为您的模式,例如.*.xlsx]
fileName=Dir(folderName&“\*.*”)
文件名“”时执行此操作
'更新状态栏以指示进度
Application.StatusBar=“Processing”&folderName&“\”文件名
设置wb=eApp.Workbooks.Open(folderName&“\”文件名)
“我试着把代码放在这里
子删除_表()
Application.DisplayAlerts=False
对于工作表中的每个aSheet
选择Case aSheet.Name
案例“INV”
删除
结束选择
下一站
Application.DisplayAlerts=True
端接头
wb.Close SaveChanges:=True“关闭打开的工作簿,不保存,根据需要进行更改
Debug.Print“Processed”&folderName&“\”文件名
fileName=Dir()
环
退出
设置eApp=Nothing
'清除状态栏并通知宏完成
Application.StatusBar=“”
MsgBox“已完成在所有工作簿上执行宏”
端接头
当我试图执行excel时,它崩溃了。有什么建议吗?您可以这样做:
'...
fileName = Dir(folderName & "\*.*")
Do While fileName <> ""
'Update status bar to indicate progress
Application.StatusBar = "Processing " & folderName & "\" & fileName
Set wb = Workbooks.Open(folderName & "\" & fileName)
Application.DisplayAlerts = False
On Error Resume Next
wb.Worksheets("INV.").Delete
On Error Goto 0
Application.DisplayAlerts = True
wb.Close True 'save changes
fileName = Dir()
Loop
”。。。
fileName=Dir(folderName&“\*.*”)
文件名“”时执行此操作
'更新状态栏以指示进度
Application.StatusBar=“Processing”&folderName&“\”文件名
设置wb=Workbooks.Open(folderName&“\”文件名)
Application.DisplayAlerts=False
出错时继续下一步
wb.工作表(“库存”)。删除
错误转到0
Application.DisplayAlerts=True
wb.Close True“保存更改”
fileName=Dir()
环
…或者如果您想保留原始的单独子系统:
Sub RunOnAllFilesInFolder
'...
fileName = Dir(folderName & "\*.*")
Do While fileName <> ""
'Update status bar to indicate progress
Application.StatusBar = "Processing " & folderName & "\" & fileName
Set wb = Workbooks.Open(folderName & "\" & fileName)
delete_sheet wb, "INV." '<< call your Sub and pass the workbook & sheet name
wb.Close True 'save changes
fileName = Dir()
Loop
'...
End Sub
Sub delete_sheet(wb As Workbook, shtName as String)
Dim aSheet As Worksheet
For Each aSheet In wb.Worksheets
If aSheet.Name = shtName Then
Application.DisplayAlerts = False
aSheet.Delete
Application.DisplayAlerts = True
Exit For 'done looking...
End If
Next aSheet
End Sub
子文件夹
'...
fileName=Dir(folderName&“\*.*”)
文件名“”时执行此操作
'更新状态栏以指示进度
Application.StatusBar=“Processing”&folderName&“\”文件名
设置wb=Workbooks.Open(folderName&“\”文件名)
删除工作表wb“库存”和
Sub RunOnAllFilesInFolder
'...
fileName = Dir(folderName & "\*.*")
Do While fileName <> ""
'Update status bar to indicate progress
Application.StatusBar = "Processing " & folderName & "\" & fileName
Set wb = Workbooks.Open(folderName & "\" & fileName)
delete_sheet wb, "INV." '<< call your Sub and pass the workbook & sheet name
wb.Close True 'save changes
fileName = Dir()
Loop
'...
End Sub
Sub delete_sheet(wb As Workbook, shtName as String)
Dim aSheet As Worksheet
For Each aSheet In wb.Worksheets
If aSheet.Name = shtName Then
Application.DisplayAlerts = False
aSheet.Delete
Application.DisplayAlerts = True
Exit For 'done looking...
End If
Next aSheet
End Sub