编辑:
我进一步研究了这个问题,现在有了一个最小的文件,可以在其中复制错误/错误。所有加载项均已停用,我仅使用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级)和一些数据。
我如何破坏文件:
文件中已损坏的工作表中没有任何代码,并且在这些循环中未激活。这是损坏的数据验证的前后:
腐败前:
<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中它无法修复并完全打开。
浏览xmlSheet文件后,我发现损坏发生在dataValidation-Tags中。有时不在一个特定的数据验证中,有时不在另一个中。
损坏的dataValidation标签看起来像这样:
<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个字符。在损坏的工作表上,没有与数据库的数据连接。
任何想法或提示都值得赞赏!