![](/img/trans.png)
[英]Using getfolder function to go to a default folder then select sub-folder
[英]How to loop through folder & sub-folder to open a file?
我想使用预定义的变量名称打开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
我使用的是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 ')。
顺便说一句,代码从头到尾循环了几次,直到最终找到并打开工作簿。
可能的第一印象是这可能行不通,但是行之有效。 所以我想请您详细说明一下,我真的不明白这段代码是如何工作的!?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.