我想用预先定义的变量名打开一个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
答案 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 ')。
顺便说一句,代码从头到尾循环了多次,直到最终找到并打开工作簿。
可能的第一印象是这可能无法正常工作,但确实有效。所以我想请您详细说明一下,我真的不明白这段代码是如何工作的!?