VBA无法移动到目录中的下一个文件,而是选择名为“0”的文件&引用;

VBA无法移动到目录中的下一个文件,而是选择名为“0”的文件&引用;,vba,loops,directory,Vba,Loops,Directory,我对在目录中打开文件的循环函数有点问题。找到下面的代码: 'Build the complete folder path: strTargetFolder_Batch = "I:\PerfTeam" strTargetFolder_Batch = strTargetFolder_Batch & strMonthNo & " " & strMonthName & " " & strYear & "\" & "At

我对在目录中打开文件的循环函数有点问题。找到下面的代码:

    'Build the complete folder path:
     strTargetFolder_Batch = "I:\PerfTeam"

     strTargetFolder_Batch = strTargetFolder_Batch & strMonthNo & " " & strMonthName & " " & strYear & "\" & "Attribution - Draft"

        If Right(strTargetFolder_Batch, 1) <> "\" Then
            strTargetFolder_Batch = strTargetFolder_Batch & "\"
        End If

        If Not CreateFolder(strTargetFolder_Batch) Then
            MsgBox "Unable to create the folder:" & vbCrLf & strTargetFolder_Batch, vbExclamation
        Else
        End If

        FolderPath = strTargetFolder_Batch

        'Sets Parameters to Open the file
        MyFolder = FolderPath 'location of files
        MyExtension = "*.xlsx*"
        MyFile = Dir(MyFolder & MyExtension)

        Do While MyFile <> "" 'will start LOOP until all files in MyFolder have been looped through

              Set oWbk = Workbooks.Open(MyFolder & "\" & MyFile)

               *Batch Run is a Boolean function*

              '*** 1. Calls Import Data Macro, which Imports the Data ***'
              Call Import_new_data(Batch_Run, oWbk)

              '*** 2. Calls Data Collector Macro, which Analyses the Data ***'
              Call Data_Collector(Batch_Run)

              '*** 3. Calls Report Production Macro, which Produces Report ***'
              Call Report_Production_Sub(Batch_Run)

        ContinueLoop:
        MyFile = Dir 

        '**^^ Here is where the Macro breaks after completing a full first iteration** !

        Loop
'生成完整的文件夹路径:
strTargetFolder\u Batch=“I:\PerfTeam”
strTargetFolder\u Batch=strTargetFolder\u Batch&strMonthNo&&strMonthName&&strYear&\&attribute-Draft
如果正确(strTargetFolder\u Batch,1)“\”则
strTargetFolder\u Batch=strTargetFolder\u Batch&“\”
如果结束
如果不是CreateFolder(strTargetFolder\u批处理),则
MsgBox“无法创建文件夹:”&vbCrLf&strTargetFolder\u批处理,vbequipment
其他的
如果结束
FolderPath=strTargetFolder\u批处理
'设置打开文件的参数
MyFolder=FolderPath文件的位置
MyExtension=“*.xlsx*”
MyFile=Dir(MyFolder&MyExtension)
Do While MyFile“”将启动循环,直到MyFolder中的所有文件都已循环通过
设置oWbk=Workbooks.Open(MyFolder&“\”&MyFile)
*批处理运行是一个布尔函数*
'*** 1. 调用导入数据宏,该宏导入数据***'
调用导入新数据(批处理运行,oWbk)
'*** 2. 调用Data Collector宏,该宏分析数据***'
调用数据采集器(批处理运行)
'*** 3. 调用报表生成宏,生成报表***'
呼叫报告生产子系统(批处理运行)
ContinueLoop:
MyFile=Dir
“**^^这里是宏在完成完整的第一次迭代后中断的地方**!
环
宏的基本功能是从打开的文件中提取数据,关闭文件,然后进行分析,然后再从中创建报告。然后,它应该在文件夹中的第二个文件上移动并执行相同的操作

虽然第一个文件可以很好地打开,并按其应该的方式进行分析,但问题还是出现了,请转到第二个文件。变量MyFile实际上拾取了一个名为“.”的“Ghost”文件,然后抛出一个错误,因为它不存在。通过一些研究,我发现这可能与目录路径有关


任何帮助都将不胜感激

调用带有参数的
Dir
函数开始搜索匹配文件。如果第二个参数未指定任何内容,is将只搜索常规文件(无目录、无隐藏文件等)

以下对
Dir
(不带参数)的任何调用都将继续由
Dir
(带参数)启动的最后一次搜索

循环中的
目录所得到的
不是一个文件,而是一个文件夹(up目录)。只有当您以选项
vbDirectory
作为第二个参数启动
Dir
时,才会得到此选项。由于代码中缺少此参数,我强烈假设代码中的任何位置(未显示)都会启动一个新的
Dir
-搜索(这会破坏以前的
Dir
-搜索的搜索结果)

更新:如果需要检查文件夹是否存在,但不想破坏
目录
-循环,可以使用
文件系统对象
。FileSystemObject可用于处理与文件和文件夹有关的一些事情

if CreateObject("Scripting.FileSystemObject").FolderExists("<enter your path>") then
如果CreateObject(“Scripting.FileSystemObject”).FolderExists(“”),则

是否关闭
oWbk
oWbk在子导入新数据中关闭。那会有问题吗?非常感谢你的回答。实际上,有一个实例,在其中一个子例程中,启动Dir搜索以测试文件夹的存在性。更具体地说,它是以下函数:FolderExists=Dir(strFolderPath,vbDirectory)vbNullString。有什么办法可以解决这个问题吗?@Tony厨师长:更新我的答案太棒了!谢谢!