VBA无法找到文件

时间:2010-11-15 15:12:21

标签: vba

我有一个用于处理Word文档的VBA脚本。该程序所做的第一件事是在一组定义的文件夹中创建文档的索引。然后它通过列表处理每个索引文档。

我遇到的问题是,它有时会决定找不到特定的文档,即使它先前已将文档编入索引,并且快速抽查也会显示文档位于正确的位置。

有人能说清楚为什么VBA会出现这种行为吗?

脚本使用Dir$函数索引文件,使用Documents.Open函数打开每个word文档进行处理。

示例代码:

ChangeFileOpenDirectory (folderName)
inputFileName = Dir$(folderName & "*.doc")
Do While inputFileName <> ""
    ... call various functions here ...
    inputFileName = Dir$
Loop

块中调用的函数之一包含以下行:

Set currentDoc = Documents.Open(fileName:=docFileName, AddToRecentFiles:=False, Visible:=False)

这是代码失败的时刻。

3 个答案:

答案 0 :(得分:0)

我发现的最烦人的事情之一是最近的文件链接作为文件本身与Dir一起返回。您可以使用FileSystemObject来检查文件类型。

答案 1 :(得分:0)

我复制/粘贴您的代码,它可以正常工作。

但是,它会打开(并隐藏)所有文件,当您在另一个目录中运行时,会打开其他文件并将其添加到打开的项目中(请查看VBA编辑器)。

我的唯一猜测是,经过一段时间后,你达到了允许的最大打开文件数量。

尝试添加

currentdoc.Close

之前

inputFileName = Dir$

答案 2 :(得分:0)

有几个原因,其中一些与其他答案重复:

  • 如果路径+文件名足够长...(您已在评论中回答)
  • 如果您要将新文件写入同一目录,Dir $可能会损坏(发生在我身上)
  • 如果您的文件名包含非标准字符(例如“#”)
  • 其他进程锁定的文件
  • 宏正在运行时删除的文件

你也可以试试这段代码......

Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(file) Then ....  

首先在VBE中启用Microsoft Scripting引用