Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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宏应用于文件夹中的所有excel文件?_Excel_Vba - Fatal编程技术网

如何将vba宏应用于文件夹中的所有excel文件?

如何将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

我想删除多个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.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