我试图在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)
答案 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
子键应如下:
为什么会这样?
症状
您在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
希望这有帮助。