2010-11-15 116 views
2

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

这是在其中码失败的点。

+0

有人访问该文件.....? – 2010-11-15 15:14:14

+0

它是否有一个特定的错误,或者它是否默默地跳过它? – 2010-11-15 15:15:49

+1

很长的路径+文件名也可能是原因 – 2010-11-15 15:20:25

回答

0

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

+0

我从我的代码打开的文档从未在我的计算机上打开过,因此它们无法显示为最近的文件链接。 – Pandelon 2010-11-16 08:36:21

0

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

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

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

尝试增加

currentdoc.Close 

之前

inputFileName = Dir$ 
+0

对不起smirkingman,我没有提到我在currentDoc.Open中执行currentDoc.Close。我想在我的脑海里,似乎太明显了。代码在大多数情况下都能正常工作,只是现在,然后它随机决定一个特定的文档不存在,即使它很明显。 – Pandelon 2010-11-16 11:13:49

0

有几个原因,一些来自其他答案复制:

  • 如果路径+文件名是足够长的时间...(你已在评论中回复)
  • 如果您正在撰写新文件到同一目录,Dir $可能会损坏(发生在我身上)
  • 如果你有非标准字符的文件名(例如: “#”)
  • 文件锁定被其他进程
  • 文件而宏观运行

你也可以尝试这个代码...

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

首先启用Microsoft脚本参考删除在VBE