Excel VBA Dir()默认路径?

时间:2016-12-16 19:11:36

标签: excel-vba vba excel

我正在使用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()应该以预期的方式工作,即使用简单的文件名而不是完全指定的路径。

2 个答案:

答案 0 :(得分:2)

这与主机应用程序认为它的目录无关。您始终可以通过调用Dir函数找出默认的目录CurDir

Debug.Print CurDir$

如果您需要更改,请致电ChDir

Debug.Print CurDir$
Debug.Print Dir$("*.*")
ChDir "C:\"
Debug.Print CurDir$
Debug.Print Dir$("*.*")

将其想象为坐在命令提示符下并键入dircd - 它完全相同。请注意,当前目录在宏执行之间保持它的状态,因此您不能依赖它在某个默认位置。

如果您需要相对于打开的工作簿的路径,请使用Workbook.Path如果您需要相对于默认路径的路径,请使用Application.Path。如果您需要测试文件是否存在,请不要使用Dir - 请改用Scripting.FileSystemObject。如果开始考虑将旧文件函数视为已弃用,那么您将自己做一件大事。

答案 1 :(得分:0)

检查Excel选项 - &gt;保存 - &gt;默认文件位置以查看默认值。默认情况下,它不会使用文件所在的位置。