打开excel文件时出现运行时错误

时间:2014-09-11 02:03:30

标签: excel vba excel-vba

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

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)

4 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。文件已损坏,VBA打开时抛出该错误。作为一种可能的解决方案,我发现了这个(faname是带路径的字符串):

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

在打开文件之前作为预防措施......如果你这样做,不要忘记在你的宏完成之前撤消它(这些是我的标准设置,使用你自己的!你可以使用Debug.Print找到它们立即窗口):

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

请注意您的安全设置实际上是什么,不要盲目复制这些设置更改... 最好还是捕获错误(“On Error ...”),并在重置之前的设置时终止。

答案 1 :(得分:4)

可能的解决方案

如果您信任文档内容,

Microsoft Support - Error message in Office when a file is blocked by registry policy settings提供了一些如何绕过此错误的机制。

一些关键注释:

  

适用于Excel 2010或2013

     

更改文件阻止设置以通过文件禁用某些文件类型的限制 - >选项 - >信托中心 - >信任设置

     

适用于Excel 2003或2007

     

您必须更改FileOpenBlock注册表子项的值以禁用某些文件类型的限制。它位于

     

对于Excel 2007:

     

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

     

对于Excel 2003:

     

HKEY_CURRENT_USER \ Software \ Policies \ Microsoft \ Office \ 11.0 \ Excel \ Security \ FileOpenBlock

     

子键应如下:

     

FileOpenBlock registry subkeys

为什么会这样?

来自Microsoft Support

  

症状

     

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

     

•打开嵌入对象

     

•执行邮件合并

     

•从查看器中打开文件

     

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

     

Office已检测到此文件存在问题。为了保护您的计算机,无法打开此文件。

     

原因

     

发生此问题是因为Office文件验证检测到问题   使用可能带来安全风险的文件。您收到错误   有关恶意文件或损坏文件的消息。

Office似乎正在检测可能存在恶意文件的内容,例如病毒或其他恶意软件,或者文件可能已损坏。如果您信任此文档,请继续打开它。否则要非常谨慎,以避免某种类型的恶意软件感染。

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

可能该文件似乎是从外部源下载/复制的,如互联网。 下面的页面讨论了如何解除&#34;取消阻止&#34;这些文件以编程方式通过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的解决方案。他提到你清除的不是文件属性,你删除备用数据流&#34; Zone.Identifier&#34;从文件。 并提供以下链接: - 维基链接... en.wikipedia.org/wiki/NTFS#Alternate_data_streams_.28ADS.29 http://vb.mvps.org/samples/Streams/

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

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

-Credit给Andreas Killer

希望这有帮助。