我正在使用Dir()查看当前目录中是否存在文件(即与我正在使用的工作簿相同的目录)。给出的代码 - 显然在视频示例中工作 - 是这样的:
IsThere = (Dir("SomeFile.xlsx") <> "")
当我运行此代码时,IsThere返回False
。我可以使用以下方法解决它:
IsThere = (Dir(ActiveWorkbook.Path & "\SomeFile.xlsx") <> "")
但我想知道为什么Dir默认情况下不会按预期在当前目录中查找。
我很难在此找到任何相关的建议。我发现的大多数如何使用Dir()的例子都是指定的文件路径,所以他们并没有真正解决我的问题。我找到的最接近的是this (obsolete) MSDN reference,其中说:
要正确运行,Dir函数需要将FileIOPermission的Read和PathDiscovery标志授予执行代码。
麻烦的是,我不太了解如何将PathDiscovery设置为1的链接建议。
对于StackOverflow,this可能是最接近我的问题 - 尽管它使用指定的路径,而我不引用网络位置。我注意到this question的回答似乎假定Dir()应该以预期的方式工作,即使用简单的文件名而不是完全指定的路径。
答案 0 :(得分:2)
这与主机应用程序认为它的目录无关。您始终可以通过调用Dir
函数找出默认的目录CurDir
:
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。如果开始考虑将旧文件函数视为已弃用,那么您将自己做一件大事。
答案 1 :(得分:0)
检查Excel选项 - &gt;保存 - &gt;默认文件位置以查看默认值。默认情况下,它不会使用文件所在的位置。