【发布时间】:2018-10-19 20:44:19
【问题描述】:
我想用我预定义的变量名打开一个 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
【问题讨论】:
-
您永远不会在
fname中包含文件夹(或子文件夹)的名称。它总是在同一个文件夹中查找文件,如果它不在那个文件夹中,它总是会失败。 -
我希望 vba 为我检测我不会指定的内容。如何修复我的代码以使其正常工作?
-
您需要将完整路径添加到
Workbooks.Open (fname)。FileSystemObject可能会在您的搜索路径中查找,但 Excel 肯定不会。 -
谢谢,我将我要求 excel 打开的代码部分更改为
Workbooks.Open(File.Path)并且它正在工作,这是正确的吗? -
VBA 不会自动为您更改文件夹。在检查文件是否存在之前,您需要将其添加到
fname的前面。如果File.Name是C:\Temp\Somefile.xlsx,而fname只是Somefile.xlsx,则它们永远不会匹配。