打开excel文件时运行时错误

我试图在button_click事件中打开excel文件。 我打开的前四个excel文件没有遇到任何错误,但是当我的macros打开第五个时,它停止并显示这个运行时错误:

 Run-time error '-2147021892 (80070bbc)': office has detected a problem with this file. To help protect your computer this file cannot be opened. 

这里是我打开excel文件的代码:

  Set wb = Workbooks.Open(fileName:=fileName, UpdateLinks:=True) 

可能的决议

Microsoft支持 – Office中的错误消息,当文件被registry策略设置阻止时,如果您信任文档内容,可能会绕过此错误的几种机制。

一些重要提示:

对于Excel 2010或2013

通过文件 – >选项 – >信任中心 – >信任设置,更改文件阻止设置以禁用某些文件types的限制

对于Excel 2003或2007

您必须更改FileOpenBlockregistry子项的值以禁用某些文件types的限制。 这是位于

对于Excel 2007:

HKEY_CURRENT_USER \ SOFTWARE \政策\微软\办公室\ 12.0 \ EXCEL \安全\ FileOpenBlock

对于Excel 2003:

HKEY_CURRENT_USER \ SOFTWARE \政策\微软\办公室\ 11.0 \ EXCEL \安全\ FileOpenBlock

子项应如下所示:

FileOpenBlock注册表子项

为什么这是发生

来自Microsoft支持 :

症状

您在Microsoft Office 2010应用程序中执行下列操作之一:

•打开一个embedded对象

执行邮件合并

•从查看器打开文件

在这种情况下您会收到以下错误信息:

Office已经检测到这个文件有问题。 为了帮助保护您的计算机,此文件无法打开。

原因

发生此问题是因为Office文件validation检测到可能造成安全风险的文件的问题。 您会收到有关恶意文件或损坏文件的错误消息。

看来,Office正在检测可能对文件有恶意的东西,比如病毒或其他恶意软件,或者文件被损坏。 如果您信任此文档,请继续打开它。 否则要非常小心,以避免某种types的恶意软件感染。

我有同样的问题。 文件被破坏,VBA打开抛出该错误。 作为一个可能的解决scheme,我发现这个(faname是一个string与path):

 Workbooks.Open FileName:= fname, UpdateLinks:=False, ReadOnly:=True, _ IgnoreReadOnlyRecommended:=True, Password:="", Editable:=FALSE, _ CorruptLoad:= xlExtractData 

重要的部分是“CorruptLoad:= xlExtractData”,它可以从损坏的文件中加载数据而不会抛出这个错误。 其他的东西只是在那里,以防止文件做…与…一起

 Application.DisplayAlerts = False Application.AskToUpdateLinks = False Application.EnableEvents = False Application.AutomationSecurity = msoAutomationSecurityForceDisable Application.Calculation = xlCalculationManual 

就像打开文件之前的预防措施一样…如果你这样做,不要忘记在你的macros完成之前撤销它(这些是我的标准设置,使用你自己的!你可以在立即窗口中使用Debug.Printfind它们):

 Application.DisplayAlerts = True Application.AskToUpdateLinks = True Application.EnableEvents = True Application.Calculation = xlNormal Application.AutomationSecurity = msoAutomationSecurityLow 

要小心你的安全设置实际上是什么,不要盲目复制这些设置的变化…最好赶上错误(“错误…”),并终止重置您以前的设置。

我试了上面的代码行与我的“损坏”的文件。 结果是灾难性的,(但原来是备份)。 所有Excel工作表(13)现在都有文本,所有大约93页的VBA代码都不见了。 样式= 17:文件大小<2000kb。

单元格格式改变的单元格会导致臭名昭着的M / S错误文本。 我不认为这是腐败的,但它可能是太多的编程Excel(S)。

可能该文件似乎从外部来源,如互联网下载/复制。 下面的页面讨论了如何通过VBA以编程方式“解锁”这样的文件。 https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-msoffice_custom/how-to-unblock-file-using-vba/bed82938-6a57-403c-afcf-fa76a26a1ac6

请参阅Andreas Killer的解决scheme。 他提到您所清除的不是文件属性,而是从文件中删除备用数据stream“Zone.Identifier”。 并给出以下链接: – 维基链接… en.wikipedia.org/wiki/NTFS#Alternate_data_streams_.28ADS.29 http://vb.mvps.org/samples/Streams/

在第二个连接到Karl E. Peterson网站的链接上,提供了Streams.zip文件,其中包含需要导入到您的项目中的CStream类,并使用KillStream函数。

 Sub Test() Dim C As New CStreams Dim i As Integer With C .FileName = "C:\test.txt" For i = 1 To .Count - 1 Debug.Print .KillStream(i) Next End With End Sub 

– 信任安德烈亚斯·吉勒

希望这可以帮助。