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 目录循环在指定文件夹中缺少一个文件_Vba_Excel_Dir - Fatal编程技术网

Vba 目录循环在指定文件夹中缺少一个文件

Vba 目录循环在指定文件夹中缺少一个文件,vba,excel,dir,Vba,Excel,Dir,我编写了一个宏来处理指定文件夹中所有文件中的数据。但是,它会跳过文件夹中的第一个文件。问题是第一个文件在这一行被引用: FileName=Dir(路径) 但下一个文件是用这一行引用的: FileName=Dir() 完整代码: Sub data_gatherer() 'skips ESAM_50 'Removes unrealistic data and sums the no. starts/hours run for each pump stream Application

我编写了一个宏来处理指定文件夹中所有文件中的数据。但是,它会跳过文件夹中的第一个文件。问题是第一个文件在这一行被引用:

FileName=Dir(路径)

但下一个文件是用这一行引用的:

FileName=Dir()

完整代码:

Sub data_gatherer() 'skips ESAM_50

    'Removes unrealistic data and sums the no. starts/hours run for each pump stream
    Application.ScreenUpdating = False

        Dim sheet As Worksheet
        Dim calcSheet As Worksheet
        Dim path As String
        Dim ColCount As Integer
        Dim StreamCode As String
        Dim StreamSum As Double
        Dim NextRow As Double
        Dim FilePath As String
        Dim FileName As String
        Dim i As Integer
        Dim SumRange As range
        Dim SheetName As String
        Dim sSrcFolder As String

        sSrcFolder = "C:\IRIS MACRO TEST ZONE\SPS IRIS Bulk Data\" ' unprocessed data

        path = sSrcFolder & "*.csv" 'files withing sSrcFolder
        FileName = Dir(path)


        Do While FileName <> ""

            FileName = Dir() '''''skips first file here'''''''''''''''''''''''''''''''''''''''''''''''
            FilePath = sSrcFolder & FileName

                If FilePath = "C:\IRIS MACRO TEST ZONE\SPS IRIS Bulk Data\" Then ''' avoids error message for " .csv"
                    Exit Do
                End If

                Workbooks.Open (FilePath) 'error here - looks for "" filename

            SheetName = Left(FileName, 10)

                With Workbooks(FileName).Sheets(SheetName)
                    ColCount = .Cells(3, .Columns.count).End(xlToLeft).Column 'COUNT COLUMNS WITH DATA need to start with col 2
                    For i = 2 To ColCount 'i=2 to avoid date column

                            Call data_cleaner_all(FileName, SheetName, i)
                            Call StreamCalcs(NextRow, FileName, SheetName, SumRange, i)

                    Next i

                End With

             Workbooks(FileName).Saved = True
             Workbooks(FileName).Close
        Loop

    Application.ScreenUpdating = True

    End Sub
Sub data_gatherer()'跳过ESAM_50
'删除不切实际的数据,并对每个泵流的启动次数/运行小时数求和
Application.ScreenUpdating=False
将工作表设置为工作表
将计算表设置为工作表
将路径设置为字符串
Dim ColCount为整数
将流代码设置为字符串
双份点心
暗淡的下一步是双重的
将文件路径设置为字符串
将文件名设置为字符串
作为整数的Dim i
模糊范围作为范围
将SheetName设置为字符串
将sSrcFolder设置为字符串
sSrcFolder=“C:\IRIS宏测试区\SPS IRIS批量数据\”'未处理的数据
path=sSrcFolder&“*.csv”带有sSrcFolder的文件
FileName=Dir(路径)
文件名“”时执行此操作
FileName=Dir()跳过此处的第一个文件
FilePath=sSrcFolder&FileName
如果FilePath=“C:\IRIS宏测试区\SPS IRIS批量数据\”,则“””会避免“.csv”的错误消息
退出Do
如果结束
工作簿.Open(FilePath)错误-查找“”文件名
SheetName=左侧(文件名,10)
带工作簿(文件名).Sheets(图纸名)
ColCount=.Cells(3,.Columns.count).End(xlToLeft)。Column的计数包含数据的列需要以col 2开头
对于i=2到ColCount'i=2以避免日期列
调用数据\u cleaner\u all(文件名、表名、i)
调用StreamCalcs(NextRow、文件名、SheetName、SumRange、i)
接下来我
以
工作簿(文件名).Saved=True
工作簿(文件名)。关闭
环
Application.ScreenUpdating=True
端接头
FileName=Dir()
放在循环的端,直接放在

Loop
线路

编辑re:

FileName=Dir()

Dir(path)
初始化
Dir
函数,并返回第一个文件/文件夹名
Dir()
始终是对前面出现的
Dir(path)
的后续调用,并返回下一个文件/文件夹

如果在未调用
Dir(path)
的情况下调用
Dir()
,则会出现运行时错误。

FileName=Dir()
放在循环的端,直接放在

Loop
线路

编辑re:

FileName=Dir()

Dir(path)
初始化
Dir
函数,并返回第一个文件/文件夹名
Dir()
始终是对前面出现的
Dir(path)
的后续调用,并返回下一个文件/文件夹


如果调用
Dir()
而之前没有调用
Dir(path)
,则会出现运行时错误。

只需将
FileName=Dir()
行移到
循环
行之前。太好了,谢谢@Vincent G。
FileName=Dir()
FileName=Dir(path)
Dir(Path)
返回与路径对应的第一个文件名。您可以通过使用空字符串参数或不使用参数调用Dir来获取其他文件名。只需将
filename=Dir()
行移动到
循环
行之前。太好了,谢谢@Vincent G。
filename=Dir()之间的含义有什么区别
FileName=Dir(path)
Dir(path)
返回与路径对应的第一个文件名。通过使用空字符串参数或无参数调用Dir,可以获得其他文件名。