Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA找不到文件_Vba - Fatal编程技术网

VBA找不到文件

VBA找不到文件,vba,Vba,我有一个VBA脚本用于处理Word文档。程序要做的第一件事是在一组定义的文件夹中创建文档索引。然后,它通过列表处理每个索引文档 我遇到的问题是,它有时会决定找不到某个特定的文档,即使它以前为该文档编制了索引,并且快速抽查显示该文档位于正确的位置 有人能解释为什么VBA会显示这种行为吗 脚本使用Dir$函数索引文件,并使用文档。Open函数打开每个word文档进行处理 示例代码: ChangeFileOpenDirectory (folderName) inputFileName = Dir$(f

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

我遇到的问题是,它有时会决定找不到某个特定的文档,即使它以前为该文档编制了索引,并且快速抽查显示该文档位于正确的位置

有人能解释为什么VBA会显示这种行为吗

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

示例代码:

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

这就是代码失败的地方。

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

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

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

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

我唯一的猜测是,过了一段时间,您将达到允许的最大打开文件数

尝试添加

currentdoc.Close
就在之前

inputFileName = Dir$

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

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

我唯一的猜测是,过了一段时间,您将达到允许的最大打开文件数

尝试添加

currentdoc.Close
就在之前

inputFileName = Dir$

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

  • 如果路径+文件名足够长。。。(你已经在评论中回答了)
  • 如果您正在将新文件写入同一目录,Dir$可能会损坏(发生在我身上)
  • 如果文件名带有非标准字符(例如“#”)的话
  • 被其他进程锁定的文件
  • 宏运行时删除的文件
您也可以尝试此代码

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

首先在VBE中启用Microsoft脚本参考有几个原因,有些原因与其他答案重复:

  • 如果路径+文件名足够长。。。(你已经在评论中回答了)
  • 如果您正在将新文件写入同一目录,Dir$可能会损坏(发生在我身上)
  • 如果文件名带有非标准字符(例如“#”)的话
  • 被其他进程锁定的文件
  • 宏运行时删除的文件
您也可以尝试此代码

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

首先在VBE中启用Microsoft脚本引用,有人访问该文件……?是否会出现特定错误,还是会自动跳过该错误?很长的路径+文件名也可能是原因您使用什么方法/命令/函数来确定文档“找不到”?举一个你失败的例子code@Mitch:没有其他人正在访问该文件有人正在访问该文件….?是否有特定的错误,或者它是否会自动跳过该错误?很长的路径+文件名也可能是原因您使用什么方法/命令/函数来确定文档“找不到”?举一个你失败的例子code@Mitch:没有其他人正在访问文件我用代码打开的文档以前从未在我的计算机上打开过,因此它们不能显示为最近的文件链接。我用代码打开的文档以前从未在我的计算机上打开过,因此它们不能显示为最近的文件链接。抱歉,smirkingman,我并没有想到我在做currentDoc.Open的同一个函数中做currentDoc.Close。我想在我的脑海里,这似乎太明显了,无法提及。代码在大多数情况下都能正常工作,只是偶尔它会随机决定某个特定的文档不存在,即使它很明显不存在。对不起,斯默金曼,我没有想到我在做currentDoc.Open的同一个函数中做currentDoc.Close。我想在我的脑海里,这似乎太明显了,无法提及。代码在大多数情况下都能正常工作,它只是偶尔会随机决定某个特定文档不存在,即使它非常清楚地存在。