【问题标题】:VBA - open corrupted file - excel 2010VBA - 打开损坏的文件 - excel 2010
【发布时间】:2018-02-26 10:52:21
【问题描述】:

我有一些文件,当我手动尝试打开它们时会出现以下消息:

Excel 在 ***.xlsx 中发现了不可读的内容。是否要恢复工作簿的内容?

当我单击“是”时,它会显示以下内容:

Excel 能够通过修复或删除不可读的内容来打开文件。
删除功能:来自 /xl/worksheets/sheet1.xml 部分的数据验证

然后我可以手动保存,替换它,然后文件正常打开,没有错误。

现在我的问题是,我想对 VBA 代码做同样的事情。 我准备了以下内容,但没有运气。它带有1004错误:

Sub letshope()


WithApplication
.DisplayAlerts=False
.ScreenUpdating=False
.EnableEvents=False
.AskToUpdateLinks=False
EndWith

Set wb =Workbooks.Open(Filename:= _
"\\folder\***.xlsx", _
UpdateLinks:=0,Password:="password", _
IgnoreReadOnlyRecommended:=True, _
CorruptLoad:=XlCorruptLoad.xlRepairFile)


EndSub

不幸的是,网络上的每个人都建议使用CorruptLoad:=XlCorruptLoad.xlRepairFile 部分打开所有损坏的文件。 不是这种情况。

请问有谁有什么想法吗?
手动打开它们、保存它们等是一个痛苦的过程。

一旦我手动打开它们并按下恢复它们都会出现相同的错误:

error067760_07.xml

Errors were detected in file 'XXXX.xlsx'</summary>
-<removedFeatures summary="Following is a list of removed features:">
<removedFeature>Removed Feature: Data validation from /xl/worksheets/sheet1.xml part</removedFeature></removedFeatures></recoveryLog>

【问题讨论】:

  • 我认为首先应该解决的问题是您如何/为什么要损坏 这么多 个文件,以便自动修复?无论如何,这不是应该自动化的事情,因为根据定义,文件损坏是不可预测的,因此不能也不应该自动化。您是否删除并重新安装了 Office?听起来您需要单独安装工作文件,否则您将继续遇到问题。
  • 第二件事是有时 Excel 说它修复了一个文件,但如果你打开它,它仍然是损坏的。我个人永远不会相信 Excel 可以正确修复文件。许多文件将保持损坏。同样对于包含大量数据的大型 Excel 文件,我得到了最好的结果,而不是使用 xlsx 格式,而是使用二进制 xlsb 格式,这似乎更稳定。
  • 我试图找出导致文件损坏的原因。它们都由某个宏填充。此宏为每个客户填充 2 个文件。文件 A 和 B。然后由不同的团队检查 A 和 B。一旦他们检查它们,他们就会保存它们,然后审阅者正在检查 A 和 B。所有检查和检查都是手动的,没有任何宏。 95% 的损坏文件将是 B 文件。 A 很少损坏。最后,一旦excel手动打开损坏的文件并重新保存,文件就OK了。不再损坏...
  • 所以作为一个进程,我有一个宏,可以打开 A 和 B 并检查特定单元格,然后将它们保存到另一个列表,比较并关闭文件。这就是我挣扎的地方,因为大多数 B 每天都被损坏......所以问题是为什么 CorruptLoad:=XlCorruptLoad.xlRepairFile 不起作用?
  • @Yan_A 不要打扰自己问为什么CorruptLoad:=XlCorruptLoad.xlRepairFile 不起作用。问问自己为什么你的文件会被破坏,然后解决这个问题!我建议尝试使用二进制 xlsb 格式而不是 xlsx,然后查看它们是否仍然损坏。如果是,请检查您的硬盘和内存。文件恢复应始终手动完成,因为您永远不知道会得到什么。某些东西被破坏总是意味着某些信息可能会丢失而您不知道是哪个。因此,您应该根据备份验证恢复的数据。

标签: excel vba


【解决方案1】:

这里有同样的问题,但这对我有用:

IgnoreReadOnlyRecommended:=True, CorruptLoad:=XlCorruptLoad.xlExtractData

【讨论】:

    【解决方案2】:

    在函数启动后设置Application.DisplayAlerts = False。并在函数结束之前设置Application.DisplayAlerts=True

    设置 Application.DisplayAlert 背后的想法是绕过在处理 excel 时出现的任何警报。

    注意:这是一个应用程序级别的设置,因此将这些选项重置为其默认值将很重要,否则打开 excel 时将不会看到任何警报(无需编程)。

    Sub letshope()
    
    
    With Application
    .DisplayAlerts=False
    .ScreenUpdating=False
    .EnableEvents=False
    .AskToUpdateLinks=False
    End With
    
    Set wb =Workbooks.Open(Filename:= _
    "\\folder\***.xlsx", _
    UpdateLinks:=0,Password:="password", _
    IgnoreReadOnlyRecommended:=True, _
    CorruptLoad:=XlCorruptLoad.xlRepairFile)
    
    
    With Application
    .DisplayAlerts=True
    .ScreenUpdating=True
    .EnableEvents=True
    .AskToUpdateLinks=True
    End With
    
    
    EndSub
    

    '

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2015-10-10
      • 1970-01-01
      相关资源
      最近更新 更多