我正在完成一个练习,该练习使用 Dir() 来查找当前目录中是否存在文件(即与我正在使用的工作簿相同的目录)。给出的代码 - 显然在视频示例中工作 - 如下所示:
IsThere = (Dir("SomeFile.xlsx") <> "")
当我运行此代码时,IsThere 返回False
。我可以使用以下方法解决这个问题:
IsThere = (Dir(ActiveWorkbook.Path & "\SomeFile.xlsx") <> "")
但我想知道为什么 Dir 默认情况下没有按预期在当前目录中查找。
我正在努力寻找与此相关的建议。我发现的大多数有关如何使用 Dir() 的示例都指定了文件路径,因此它们并没有真正阐明我的问题。我发现的最接近的是 this (obsolete) MSDN reference其中说:
To run correctly, the Dir function requires the Read and PathDiscovery flags of FileIOPermission to be granted to the executing code.
问题是,我不太明白其中关于如何将 PathDiscovery 设置为 1 的链接建议。
对于 StackOverflow,this可能是最接近我的问题 - 尽管它使用指定的路径,并且我不引用网络位置。我注意到 this question 的答案似乎假定 Dir() 应该以预期的方式工作,即使用简单的文件名而不是完全指定的路径。
最佳答案
这与主机应用程序认为它的目录是什么无关。您始终可以通过调用 CurDir
函数找出 Dir
默认的目录:
Debug.Print CurDir$
如果需要更改,请调用ChDir
:
Debug.Print CurDir$
Debug.Print Dir$("*.*")
ChDir "C:\"
Debug.Print CurDir$
Debug.Print Dir$("*.*")
将其想象为坐在命令提示符处并键入 dir
或 cd
- 它执行完全相同的操作。请注意,当前目录在宏执行之间保留其状态,因此您不能依赖它位于某个默认位置。
如果您需要相对于打开的工作簿的路径,请使用 Workbook.Path
;如果您需要相对于默认路径的路径,请使用 Application.Path
。如果您需要测试文件是否存在,请根本不要使用 Dir
- 请改用 Scripting.FileSystemObject。如果开始认为旧文件函数已被弃用,那么您将对自己大有帮助。
关于Excel VBA Dir()默认路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41191001/