编辑:
我进一步研究了这个问题,现在有一个最小的文件,我可以在其中重现错误/错误。所有加载项都已停用,我只使用 4 行 VBA 代码:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Tabelle15.Range(Target, Target.Offset(1, 0)).EntireRow.Copy
Target.Offset(2, 0).EntireRow.Insert
End Sub
该文件有 2 张表格,上面有格式、数据验证、大纲(3 个级别)和一些数据。
我做什么来破坏文件:
- 打开文件
- 在大纲级别 2 上单击 3 次(--> 隐藏一些行)
- 在大纲级别 3 上单击 3 次(--> 取消隐藏行)
- 双击单元格以通过 VBA 代码复制两行
- 关闭文件
- 重复直到文件损坏(有时需要 10 次或更多循环,有时文件在 1 次循环后损坏)
文件中损坏的工作表中没有任何代码,并且在这些循环中未激活。这是损坏数据验证的前后对比:
腐败前:
<dataValidation type="list" allowBlank="1" showInputMessage="1" showErrorMessage="1" sqref="D11 D13 D15 D9">
腐败后:
<dataValidation type="list" allowBlank="1" showInputMessage="1" showErrorMessage="1" sqref="D11:A11 1:A90 A16384:D4294967295 D9">
我仍然不知道为什么会这样。如果有人有同样的问题或知道解决方法,这样腐败就不会发生,那将会很有趣。(我尝试了明显的 Application.Screenupdating,Application.Wait,...)
编辑结束---
不幸的是,我不能说这个问题是什么时候发生的,因为我只得到了损坏的工作簿。
我们在 VB.net 中为 Excel 编写了一个 COM-AddIn,它可以执行各种操作(即以特定结构复制单元格和工作表、与 SQL-DB 的数据连接、保存工作簿......)
现在,我从 AddIn 的用户那里获得了一些已损坏的工作簿。问题是用户正在处理文件并且没有问题。只有在保存、关闭和重新打开文件后,Excel 才会显示是否应该修复文件的问题。根据文件类型(我们使用 *.xlsx 和 *.xlsb)Excel 会“修复”文件并从 1 张纸上删除所有格式 - 在 *.xlsb 中它根本不会修复和打开。
在浏览了 xml-Sheet 文件后,我发现损坏发生在 dataValidation-Tags 中。不是在一个特定的数据验证中,有时在一个中,有时在另一个中。
损坏的 dataValidation-tags 如下所示:
<dataValidation type="list" allowBlank="1" showInputMessage="1" showErrorMessage="1" sqref="S26:26 1:A523 A16384:S4294967295 S32"><formula1>"Item1,Item2,Item3"</formula1></dataValidation>
修复数据验证或文件不是问题。到目前为止,我可以很好地恢复我的工作簿。我的主要问题是我找不到任何线索来解决这个问题。
在工作表上发生的大多数操作是复制和插入(而不是粘贴)整行。在有时会损坏的一张纸上,只有“复制自”,没有粘贴或插入。似乎文件的一般性能也会影响问题发生的频率。
由于我无法提供发生这种损坏的任何代码,因此我不希望在这里找到解决方案,但也许有人遇到了类似的问题并且有一个提示,可以告诉我正确的方向。
附加信息:问题发生在不同的机器上。我没有设法重现腐败过程。据我所知,该问题仅发生在 Excel 2016 上,但我不能排除早期版本同样会损坏文件。我检查了(至少在某些机器上)Office 和 Windows 的所有更新都已安装。数据验证中的公式(方式)少于 255 个字符。在损坏的工作表上,没有与数据库的数据连接。
任何想法或提示表示赞赏!