如何循环浏览文件夹和子文件夹以打开文件?

时间:2018-10-19 20:44:19

标签: excel vba

我想用预先定义的变量名打开一个Excel文件。

基于该月的文件名将为PIF_08.31.2018,但是下个月的文件名将为PIF_09.30.2018。我想查看文件夹和子文件夹并打开指定的文件。

我收到一条错误消息,指出找不到文件,但显然它在子文件夹中。

我怀疑我的代码没有放入任何文件夹或没有进入子文件夹。

我的文件夹的结构是Main-> Year(即2018年)-> Month(即8月8日)。

在每个月的文件夹中,我有2个文件,我想打开指定的文件。

Sub test()
    Dim FileSystem As Object
    Dim HostFolder As String
    HostFolder = "S:\Main\"
    Set FileSystem = CreateObject("Scripting.FileSystemObject")
    DoFolder FileSystem.GetFolder(HostFolder)
End Sub

Sub DoFolder(Folder)
    Dim SubFolder
    Dim CurrFile
    Dim fname
    Dim folderpath
    Dim File       
    fname = "PIF_" & Format(WorksheetFunction.EoMonth(Now, -2), "MM.D.YYYY") & ".xlsx"
    'PIF_08.31.2018
    For Each SubFolder In Folder.subfolders
        DoFolder SubFolder
    Next   
    For Each File In Folder.Files
        If File.Name = fname Then
            Workbooks.Open (File.Path)
        End If
    Next
End Sub

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

我听不懂这段代码!?

我使用的是Excel 2003,没有EoMonth函数,但是从我的阅读中可以看出,除非您使用的是“ MM.D.YYYY”而不是“ MM.DD”,否则您可能正在使用它。 YYYY ”。如果那不能解决您的问题(应该不会),那么VBA可能会以不同的方式“翻译”日期。无论如何,我都不会打扰,因为您只需使用 VBA (无需EoMonth)即可实现所有这些目标:

fname = "PIF_" & Format(DateSerial(Year(Date), (Month(Date) + 1) - 2, 0), _
    "MM.DD.YYYY") & ".xlsx"

我已经对其进行了调整,因此您可以像使用EoMonth函数一样使用它(请注意'-2 ')。

顺便说一句,代码从头到尾循环了多次,直到最终找到并打开工作簿。

可能的第一印象是这可能无法正常工作,但确实有效。所以我想请您详细说明一下,我真的不明白这段代码是如何工作的!?