Excel VBA Dir()默认路径?

标签 excel vba

我正在完成一个练习,该练习使用 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$("*.*")

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

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

关于Excel VBA Dir()默认路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41191001/

相关文章:

vba - Excel VBA - 范围及其子范围的并集

excel - 需要 Access VBA 等待 Excel 进程完成后再恢复

Excel - 将负数变为空值

excel - 在 Excel 中使用时间格式的 if 语句

vba - 使用 If 子句循环某个范围

excel - 从字符串引用 Excel 用户窗体控件名称值 (VBA)

python : running Excel macro with python

excel - 嵌套的 IF/AND 语句

python - 如何使用python从 'utf-8'数据创建excel文件时更正编码

.net - 错误 : <target>. ColumnName 和 <source>.ColumnName 具有冲突的属性:DataType 属性不匹配