运行时错误'1004' - 对象'Workbooks'的方法'Open'失败。

4

好的,到目前为止我已经卸载并重新安装了Office-2010 3到4次,进行了长达3天的研究,但没有成功。我开始从Vbscript或Excel VBA获得此错误,执行相同的命令已经有几个月了。我不确定我可能改变了什么,我不记得改变了任何可能导致它的东西,但我把它锁定在ReadOnly:=True参数上。我认为注册表可能有问题......但重新安装会修复它,对吗?结果不是这样......

无论如何,这是我在Excel 2010上记录的非常简单的命令。这个命令运行良好,文件也打开了:

Sub Macro1()
     Workbooks.Open Filename:="C:\temp\file_9928_131101.xlsx"
End Sub

但当我添加了ReadOnly:=True参数时,它却无法工作:
Sub Macro1()
     Workbooks.Open Filename:="C:\temp\file_9928_131101.xlsx", ReadOnly:=True
End Sub

这是返回的错误 运行时错误'1004'对象'Workbooks'的方法'Open'失败:

当我点击Debug时,错误发生在唯一的代码行。


谢谢,不行,同样的错误。 - Fritz Larco
1
你的代码没有问题。确保文件存在...另外,你是从Excel VBA还是VBScript执行的? - Siddharth Rout
2
这与注册表无关,无论你重复多少次都没有关系。问题出在文件上,它已经损坏了。当Excel以读/写方式打开它时,它可以修复它。但是当你告诉它以只读方式打开时,它就无法修复(因为你已经说过它不能写入该文件)。 - Ken White
我刚刚记录了相同的操作(唯一的区别是我从对话框中选择了“只读打开”),并且得到了基本相同的代码(不同的路径/文件名)。它也记录了一个 ChDir,但是将其注释掉并没有任何影响。对我来说它是有效的 - 没有文件损坏或其他错误的问题。我开始怀疑您机器上的现有插件可能存在冲突。 - Floris
David,谢谢。我尝试了你的命令 for %A in ("%windir%\system32.dll" "%windir%\system32.ocx") do regsvr32 /s "%A"** 但是什么也没发生。我认为它没有找到任何文件。此外,我在Google上搜索了一下你的命令,并找到了另一个命令要尝试:**for %a in (c:\Windows\System32*.dll) do regsvr32.exe /s "%a"**。这个命令找到了一堆文件。我重新启动电脑... Excel出现了同样的问题。再次感谢...我不知道问题出在哪里。 - Fritz Larco
显示剩余15条评论
9个回答

6
文件已损坏。请用另一个名称重新保存,并在函数中更改名称。尝试使其正常工作,然后将文件重命名为您想要的名称。
对我起了作用,而且我有一个损坏的文件。只读不应该是个问题。

谢谢,Helena。但是不行,这种情况发生在所有的Excel文件上。即使是我新建的文件也是如此。文件在其他电脑上可以正常打开,无论是只读模式还是非只读模式。这是一个本地电脑问题,我不知道该如何解决。 - Fritz Larco

4

对于像我这样遇到此问题并且常规解决方案无法解决的人,我在此提供一个答案。

另一个可能导致此问题的原因是损坏的临时文件。我认为只有在您尝试打开的文件位于网络驱动器或其他远程主机上时才适用。

无论如何,请尝试清除您的临时文件夹(即如果您在Windows Explorer中键入%temp%,将会访问到该文件夹),然后重新启动计算机。


4
我曾经遇到一个问题,我有一个Access文件存储在本地OneDrive文件夹中,引用了同一本地OneDrive文件夹中的Excel文件。解决方案是将所有文件移动到“静态”(即不同步,不是OneDrive)文件夹中。
希望这个具体的案例/应用能帮助到某些人。

太好了!谢谢 :-). 这对我来说似乎是一个间歇性的问题。我暂停了OneDrive,它似乎已经解决了(或者我很幸运!)。 - John Stephenson

1

我知道现在有点晚了,但如果你想自动打开和修复一个损坏的工作簿,请使用以下方法:

Set oWB = Workbooks.Open(Filename:="C:\my\file\path.xlsx", CorruptLoad:=XlCorruptLoad.xlRepairFile)

0
如果您正在从某个外部来源(例如电子邮件)下载文件,请直接从电子邮件中打开文件,然后保存文件。尝试在宏中打开文件...希望它能够正常工作...对我来说有效... :)

1
你能否对你的解决方案中的打开和保存部分(或其他任何部分)更加简明扼要地说明一下? - dakab

0

我有一个在后台运行的流氓Excel进程。当我从任务管理器中结束它时,代码就可以正常工作了。希望这可以帮到你。


0

试着更改文件名并保存一次,您的问题将非常容易地得到解决。

例如:如果文件名是"销售报告1-12-2020",则将其更改为"Sales_report_1-12-2020"或"Sales_Report_1"。


0

我也曾经对Workbook.Open函数异常疯狂,出现了奇怪的无法打开错误,没有明显的原因。我的代码在Open函数后还进行了一些复制粘贴操作,似乎触发了它。

最终我发现关闭ScreenUpdating会导致这个问题 - 开启ScreenUpdating,让事情变得顺畅(也许将来有人会发现这很有用)。我是那种尽可能关闭所有代码的ScreenUpdating的人。

Application.ScreenUpdating = False

-2

我知道我回答晚了,但我解决了一个类似的问题(同样的错误,但是从 .Net 应用程序运行 Excel)通过确保在目标机器上正确安装了 VBA。

控制面板 -> 程序和功能 -> 卸载程序... 找到您的 Office 安装,右键单击并选择“更改” -> 添加或删除功能 -> Office 共享功能 -> Visual Basic for Applications -> 从我的计算机运行

这对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接