excel - 使用 Windows Server 2012 时 VBA 崩溃而没有神奇的停止
问题描述
我有一个带有 VBA 的 XLSM 文件,在 Windows 7 Pro 上的 Excel 2010 中制作,它在那里工作正常,但在 Windows Server 2012 中运行相同的文件,它使 Excel 2010 崩溃并出现一般错误消息
“Microsoft Excel 已停止工作”。
但是越来越奇怪了……
到目前为止我尝试了什么:
已验证的 Excel 的引用在计算机之间是相同的,并且没有一个被标记为缺失。
验证没有数据库调用——有多个工作簿(一个 XLSM,几个 XLSX)和大量代码,但每个项目都是静态的且自包含的。
使用编程停止无数次。我会解释的。
我使用 Stop 来找出代码执行在哪里工作,直到它在哪里崩溃,一遍又一遍,注释掉有效和无效的停止,添加新的停止,保存,直到我缩小了导致它崩溃的确切代码行.
它在中断模式下在那条线上崩溃,然后它没有在运行模式下在那条线上崩溃。神奇的是,根本没有改变那条线,这些变化就发生了。我唯一改变的是在之前和之后放置 Stop,然后注释掉 Stops。
好吧,显然我一定是不小心添加或删除了除 Stops 之外的代码,这导致有问题的行开始正常执行。代码执行继续并在稍后崩溃,所以我再次煞费苦心地将其缩小到一行,它再次神奇地开始正确执行该行并一直运行到最后。现在没有崩溃,只是因为添加和评论停止。随后的运行也很好。原始的备份副本仍然会使 Excel 崩溃。
虽然很神秘,但这会解决问题,除了......
Windows Server 上有大量类似的 XLSM 文件和它们的静态项目文件夹,每一个都不同,我不能对每一个都这样做,即使它确实有任何意义如何驱除鬼魂。
所以我想知道,有什么我可以用 VBA 做的,这样它就不会遇到问题吗?
到目前为止,我为此尝试了什么:
在几个任意位置添加并注释掉 Stop(不花时间来缩小确切的代码行)。
添加了一个新的空类模块。
编译。
这些都没有阻止它崩溃。好像我的两个眼球集中在违规线上是唯一的解决方案,但这没有任何意义。
设计于...
Windows 7 Professional Service Pack 1 64 位 Microsoft Office Professional Plus 2010 Excel 版本:14.0.7192.5000(32 位)
关于...的问题
Windows Server 2012 标准版 Microsoft Office 标准版 2010 Excel 版本 14.0.7128.5000(32 位)
解决方案
我现在在同一台服务器上遇到过很多次,重要的是,我在另一台服务器上多次遇到过这种情况,所以这似乎完全符合运行 MS Excel 的服务器的已知概念。 “气质”。
解决方案:
- 在某个任意函数的任何行中添加任何字符。
- 单击同一功能中的任何其他行。(如果跳过此步骤,此解决方案将失败,并且问题将保持不变。)
- 删除您添加的字符。
- 与其他需要它的任意函数重复该过程。
如何知道一个函数是否需要它?弄清楚它很费力且容易出错,但在我的情况下,我可以通过我的主 Sub 并跨步直到它崩溃。然后我可以重新启动 Excel,进入该函数并重复跨步和崩溃,深入了解每次当前函数调用的函数,直到在该函数调用分支中不再发生崩溃。
在我的例子中,没有一个幽灵错误出现在主 Sub 中,只有在调用的函数中。它各不相同,但在数千行代码中,可能有大约 5 或 10 个幽灵点。
在多年来每天使用大量的不同服务器上,这种情况从未发生过一次,但没有人能发现服务器的哪些差异可能会在一开始就阻止它发生。
推荐阅读
- c++ - 布尔值始终评估为真
- javascript - 如何通过滚动而不刷新来检测y偏移的变化
- java - JPA合并第一次不起作用,但第二次起作用
- ruby-on-rails - 控制器没有从 ApplicationController 继承方法
- python - 为什么 pandas 库在不同的 IDLE 上给出恒定的 Unicode 错误?
- php - 如何在没有 composer 的情况下在 Laravel 项目中使用 Laravel 库
- javascript - 画布未显示在 Angular 的 ng-template 中
- cloud - Google Cloud App Engine 文件存储备份
- c++ - 地图中的循环迭代器
- highcharts - x 轴中的 Highchart 日期时间间隔