Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Excel - Fatal编程技术网

VBA在多个文件夹中循环

VBA在多个文件夹中循环,vba,loops,excel,Vba,Loops,Excel,可能重复: 我正在尝试应用以下代码,该代码适用于在文件夹中的所有文件中运行此VBA循环,使其在一个文件夹中的所有文件夹中运行 这有可能吗 我有大约50个文件夹,每个文件夹都有相同名称的工作簿,所以我需要尝试提高它的效率 谢谢 Sub LoopFiles() Application.DisplayAlerts = False Dim strDir As String, strFileName As String Dim wbCopyBook As Workboo

可能重复:

我正在尝试应用以下代码,该代码适用于在文件夹中的所有文件中运行此VBA循环,使其在一个文件夹中的所有文件夹中运行

这有可能吗

我有大约50个文件夹,每个文件夹都有相同名称的工作簿,所以我需要尝试提高它的效率

谢谢

Sub LoopFiles()

    Application.DisplayAlerts = False    
    Dim strDir As String, strFileName As String
    Dim wbCopyBook As Workbook
    Dim wbNewBook As Workbook

    strDir = "C:\Documents and Settings\mburke\Desktop\Occupancy 2013\"
    strFileName = Dir(strDir & "*.xlsm")

    Set wbNewBook = Workbooks.Add

    Do While strFileName <> ""
        Set wbCopyBook = Workbooks.Open(strDir & strFileName)
        wbCopyBook.Sheets(1).Copy Before:=wbNewBook.Sheets(1)
        wbCopyBook.Close False
        strFileName = Dir
    Loop

    Application.DisplayAlerts = True
End Sub
子循环文件()
Application.DisplayAlerts=False
Dim strDir作为字符串,strFileName作为字符串
将复印机设置为工作簿
将新书本设置为工作簿
strDir=“C:\Documents and Settings\mburke\Desktop\occulation 2013\”
strFileName=Dir(strDir&“*.xlsm”)
设置wbNewBook=工作簿。添加
当strFileName“”时执行此操作
设置wbCopyBook=Workbooks.Open(strDir&strFileName)
wbCopyBook.Sheets(1).之前复制:=wbNewBook.Sheets(1)
wbCopyBook。关闭False
strFileName=Dir
环
Application.DisplayAlerts=True
端接头

当然可以!只需添加另一个LoopDirectories方法,对文件夹执行DIR

将LoopFiles方法更改为bir以接受目录参数:

Sub LoopFiles(directory As String)

    Application.DisplayAlerts = False

    Dim strDir As String, strFileName As String
    Dim wbCopyBook As Workbook
    Dim wbNewBook As Workbook


    strFileName = Dir(directory & "*.xlsm")

    Set wbNewBook = Workbooks.Add

    Do While strFileName <> ""
        Set wbCopyBook = Workbooks.Open(directory & strFileName)
        wbCopyBook.Sheets(1).Copy Before:=wbNewBook.Sheets(1)
        wbCopyBook.Close False
        strFileName = Dir
    Loop

    Application.DisplayAlerts = True
End Sub
子循环文件(目录为字符串)
Application.DisplayAlerts=False
Dim strDir作为字符串,strFileName作为字符串
将复印机设置为工作簿
将新书本设置为工作簿
strFileName=Dir(目录&“*.xlsm”)
设置wbNewBook=工作簿。添加
当strFileName“”时执行此操作
设置wbCopyBook=Workbooks.Open(目录和strFileName)
wbCopyBook.Sheets(1).之前复制:=wbNewBook.Sheets(1)
wbCopyBook。关闭False
strFileName=Dir
环
Application.DisplayAlerts=True
端接头

然后在LoopDiRecorties方法中为每个文件夹调用LoopFiles方法。

50个文件夹是否都在主模具下方的文件夹中,还是“嵌套”在两层或更多层中?您将需要对Laters进行递归调用。有关递归目录调用方法,请参见此查看
ProcessFiles()
函数,该函数基于从vbaexpress.com获取的代码,但这并没有解释如何调用每个文件夹