我有这段代码(此代码是较大堆栈的一部分,但这显然是行不通的。
Sub clearup()
Documents.Open FileName:="D:\test"
End Sub
test是一个.doc
文件。我知道test.doc
在创建时就在那儿。但是,如果我运行该宏,则会收到“抱歉,我们找不到您的文件。它是被移动,重命名还是删除了?”。我也尝试将名称更改为test.doc
无济于事。知道我在做什么错吗?
答案 0 :(得分:1)
您只需要指定带有扩展名的完整文件名即可。
Sub clearup()
Documents.Open FileName:="D:\test.doc"
End Sub
您可能必须授予权限,但随后它应该打开。
已更新:
为帮助调试问题,您可以看一下Documents.Open方法接受的其他参数。
例如,使用OpenAndRepair
参数:
Documents.Open FileName:="D:\test.doc", OpenAndRepair:=True
答案 1 :(得分:0)
我已经解决了问题,问题的第一部分是我没有使用.docx结尾(我没有注意到,因为doc的名字后面没有结尾),这与建议非常一致AJD的原因以及使我偏离轨道的原因是该文档已打开,但我没有注意到,所以我开始收到无效的名称错误,不知道为什么。
感谢您的建议。
答案 2 :(得分:0)
此讨论适用于那些使用VBA与Word,Excel等一起编写宏的人,并且在执行宏时遇到此错误:
Documents.Open(..)
错误5174很抱歉,我们找不到您的文件。它是移动,重命名还是删除了? (“驱动器号:... \文件名...”)
我已经看到很多有关此错误的帖子。有两种主要方案,最简单的一种是唯一一种正在讨论的方案。
场景1
您正在尝试打开一个“ path \ file”名称,该名称实际上在程序启动并提供“ path \ file”名称值的时间与它实际尝试打开文件的时间之间移动了。这很容易解决。
场景2
最重要的也是最难检测的
您用于指定要使用您的宏代码打开的“ path \ file”名称的值,例如:
Documents.Open (....
...所述值包含不可打印的字符(我不是在说非字母数字,例如“。”或“&”,还是不允许使用的字符,我是在说ASCII 13最有可能是字符末尾的最后一个字符值,但是当您使用Debug.Print时,不会打印该字符。
确认步骤:
处于调试模式时,Debug.Print“您要打开的path \ file的值”。
这将按预期进行打印,没有可见问题,然后您可以通过将打印值粘贴到Windows资源管理器中来确认文件存在,并且文件应自动打开。如果确实是手动打开的,那么您可能正在处理方案#2
推荐
在调试模式下,使用包含path \ file vallue的变量,编写一个FOR语句,以使用Debug.Print Asc(<>)遍历字符串的每个字符,其中<>是FOR中的变量每次从path \ file字符串中分配1个字符的迭代。您很可能会看到最后一个字符将显示为13
VBA功能
Trim(....
不会解决此问题。您需要使用
Replace (...
以“ Chr(13)”作为值的函数,试图用vbNullString替换该值
有一些技巧,包括在文件名中添加ASCII字符13(回车,不收取行费),然后附加名称等。
有一些实用程序可以清除这些问题,也许不是完全清除?...这可能是原因。
我的雷达中的另一个可能原因是DOS提示符在使用“ >>”将DIR命令的输出重定向到文件以从DIR命令创建文件列表时,添加了额外的char 13。 DIR命令结果中的所有文件都不会发生这种情况,它可能适用于具有特殊字符的文件。我没有时间进一步调查。