循环不循环通过DIR中的文件(外循环)

时间:2018-11-11 05:31:43

标签: excel vba

我编写了一个有效的代码,一个循环遍历CSV文件的DIR循环,执行代码,然后调用下一个直到最后。当我在该循环中添加另一个循环(即DIR循环)以调用PDF的...时,问题就开始了。

我已经遍历了代码,问题是第一个外部循环没有调用下一个CSV(PDF循环工作正常)。我已经进行了一些研究,但无法进行任何调整。

感谢您的协助。如果您可以告诉我要解决的地方,我不介意没有得到答案。

Sub Coles_claims_consolidation()
'Coles Claims Import Macro

    Dim oFSO As Object
    Dim oFolder As Object
    Dim oFile As Object



    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFSO.GetFolder(ThisWorkbook.Path & "\csv_macro\")
    For Each oFile In oFolder.Files
        Debug.Print oFile.Name
    Next 'oFile

        'Loop through each file in the folder
    For Each oFile In oFolder.Files
        If oFile.Name Like "*.pdf" Then
            FileCopy oFile, ThisWorkbook.Path & "\" & FiName2 & ".pdf"
        End If
    Next oFile

    Set oFile = Nothing
    Set oFolder = Nothing
    Set oFSO = Nothing



End Sub

2 个答案:

答案 0 :(得分:3)

oFile已包含文件路径。您应该在oFolder中设置目标文件路径并在该目录中循环。

如果只需要.pdf个文件,请保留If oFile.Name行-否则,如果要所有文件,请删除if语句。

Set oFolder = oFSO.GetFolder(ThisWorkbook.Path & "\csv_macro\")

For Each oFile In oFolder.Files
    If oFile.Name Like "*.pdf" Then
        FileCopy oFile, ThisWorkbook.Path & "\" & FiName2 & ".pdf"
    End If
Next oFile

答案 1 :(得分:0)

有效的解决方案?

更改行

oFSO.GetBaseName(oFile) = FiName2

FiName2 = oFSO.GetBaseName(oFile)

编辑:

那么这是您的最终解决方案吗?

Sub Coles_claims_consolidation()
'Coles Claims Import Macro

    Dim sPath As String
    Dim oFSO As Object
    Dim oFolder As Object
    Dim oFile As Object
    Dim FiName2 As String

    sPath = ThisWorkbook.Path & "\csv_macro\"

    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFSO.GetFolder(sPath)

    For Each oFile In oFolder.Files
        FiName2 = oFSO.GetBaseName(oFile)
        If oFile.Name Like "*.pdf" Then
            FileCopy oFile, ThisWorkbook.Path & "\" & FiName2 & ".pdf"
        End If
    Next oFile

    Set oFile = Nothing
    Set oFolder = Nothing
    Set oFSO = Nothing

End Sub