VBA 使用 Windows Server 2012 时没有神奇的 Stops 就崩溃了
VBA crashes without magical Stops when using Windows Server 2012
我有一个 VBA 的 XLSM 文件,于 Excel 2010 年在 Windows 7 Pro 上制作,它在那里工作正常,但 运行 在Windows Server 2012,它使 Excel 2010 崩溃并出现一般错误消息
"Microsoft Excel has stopped working".
但它变得更奇怪了...
到目前为止我尝试了什么:
已验证 Excel 的引用在计算机之间是相同的并且 none 被标记为丢失。
已验证没有数据库调用 -- 有多个工作簿(一个 XLSM,几个 XLSX)和大量代码,但每个项目都是静态和独立的。
无数次使用编程停止。我会解释。
我使用 Stop 来找出代码执行的有效位置,直到它崩溃之前,一遍又一遍,注释掉有效和无效的停止,添加新的停止,保存,直到我缩小了确切的行导致崩溃的代码。
它在中断模式下在那条线上崩溃,然后没有,然后在 运行 模式下在那条线上没有崩溃。神奇的是,根本没有改变那条线,这些变化就发生了。我唯一改变的是在前后放置 Stop,然后注释掉 Stops。
嗯,显然我一定是不小心添加或删除了 Stops 之外的代码,这导致违规行开始正常执行。代码继续执行并在稍后崩溃,所以我再次煞费苦心地将它缩小到一行,然后它再次神奇地开始正确执行该行并且 运行 一直到最后。现在没有崩溃,只是因为添加和评论停止。随后的 运行 也可以。原始文件的备份副本仍然崩溃 Excel。
虽然很神秘,但这会解决问题,除了...
在 Windows 服务器上有大量类似的 XLSM 文件及其静态项目文件夹,每一个都不同,我不能对每一个都这样做,即使它确实有任何意义被驱魔。
所以我想知道,有什么我可以用 VBA 做的,这样它就不会遇到这个问题吗?
到目前为止我为此所做的尝试:
添加并注释掉停在几个任意位置(不花时间来缩小确切的代码行)。
添加了一个新的空 class 模块。
已编译。
None 的那个阻止了它崩溃。就好像我的两个眼球都盯着进攻线是唯一的解决办法,但这毫无意义。
设计于...
Windows 7 专业
服务包 1
64位
微软 Office 专业增强版 2010
Excel 版本:14.0.7192.5000(32 位)
关于...的问题
Windows 服务器 2012 标准版
微软办公标准版 2010
Excel 版本 14.0.7128.5000(32 位)
我已经 运行 在同一台服务器上多次出现这种情况,重要的是,我已经 运行 在另一台服务器上多次出现这种情况,所以这绝对是似乎符合服务器 运行ning MS Excel 是 "temperamental".
的已知概念
解决方案:
- 在某个任意函数的任意行添加任意字符。
- 单击同一函数中的任何其他行。 (如果跳过此步骤,此解决方案将失败并且问题将继续存在。)
- 删除您添加的字符。
- 对每个需要它的任意函数重复该过程。
如何知道一个函数是否需要它?弄清楚它是费力且容易出错的,但在我的情况下,我可以通过我的主要 Sub 并跨过它直到它崩溃。然后我可以重新启动Excel,进入那个函数并重复单步执行和崩溃,每次都深入到当前函数调用的函数中,直到崩溃不再发生在该函数调用的分支中。
在我的例子中,none 的幽灵错误出现在主 Sub 中,仅出现在调用的函数中。它各不相同,但在数千行代码中,可能会有大约 5 或 10 个鬼点。
在多年来每天使用大量的另一台服务器上,这种情况从未发生过一次,但没有人能够发现服务器中的什么差异可能首先阻止它发生。
我有一个 VBA 的 XLSM 文件,于 Excel 2010 年在 Windows 7 Pro 上制作,它在那里工作正常,但 运行 在Windows Server 2012,它使 Excel 2010 崩溃并出现一般错误消息
"Microsoft Excel has stopped working".
但它变得更奇怪了...
到目前为止我尝试了什么:
已验证 Excel 的引用在计算机之间是相同的并且 none 被标记为丢失。
已验证没有数据库调用 -- 有多个工作簿(一个 XLSM,几个 XLSX)和大量代码,但每个项目都是静态和独立的。
无数次使用编程停止。我会解释。
我使用 Stop 来找出代码执行的有效位置,直到它崩溃之前,一遍又一遍,注释掉有效和无效的停止,添加新的停止,保存,直到我缩小了确切的行导致崩溃的代码。
它在中断模式下在那条线上崩溃,然后没有,然后在 运行 模式下在那条线上没有崩溃。神奇的是,根本没有改变那条线,这些变化就发生了。我唯一改变的是在前后放置 Stop,然后注释掉 Stops。
嗯,显然我一定是不小心添加或删除了 Stops 之外的代码,这导致违规行开始正常执行。代码继续执行并在稍后崩溃,所以我再次煞费苦心地将它缩小到一行,然后它再次神奇地开始正确执行该行并且 运行 一直到最后。现在没有崩溃,只是因为添加和评论停止。随后的 运行 也可以。原始文件的备份副本仍然崩溃 Excel。
虽然很神秘,但这会解决问题,除了...
在 Windows 服务器上有大量类似的 XLSM 文件及其静态项目文件夹,每一个都不同,我不能对每一个都这样做,即使它确实有任何意义被驱魔。
所以我想知道,有什么我可以用 VBA 做的,这样它就不会遇到这个问题吗?
到目前为止我为此所做的尝试:
添加并注释掉停在几个任意位置(不花时间来缩小确切的代码行)。
添加了一个新的空 class 模块。
已编译。
None 的那个阻止了它崩溃。就好像我的两个眼球都盯着进攻线是唯一的解决办法,但这毫无意义。
设计于...
Windows 7 专业 服务包 1 64位 微软 Office 专业增强版 2010 Excel 版本:14.0.7192.5000(32 位)
关于...的问题
Windows 服务器 2012 标准版 微软办公标准版 2010 Excel 版本 14.0.7128.5000(32 位)
我已经 运行 在同一台服务器上多次出现这种情况,重要的是,我已经 运行 在另一台服务器上多次出现这种情况,所以这绝对是似乎符合服务器 运行ning MS Excel 是 "temperamental".
的已知概念解决方案:
- 在某个任意函数的任意行添加任意字符。
- 单击同一函数中的任何其他行。 (如果跳过此步骤,此解决方案将失败并且问题将继续存在。)
- 删除您添加的字符。
- 对每个需要它的任意函数重复该过程。
如何知道一个函数是否需要它?弄清楚它是费力且容易出错的,但在我的情况下,我可以通过我的主要 Sub 并跨过它直到它崩溃。然后我可以重新启动Excel,进入那个函数并重复单步执行和崩溃,每次都深入到当前函数调用的函数中,直到崩溃不再发生在该函数调用的分支中。
在我的例子中,none 的幽灵错误出现在主 Sub 中,仅出现在调用的函数中。它各不相同,但在数千行代码中,可能会有大约 5 或 10 个鬼点。
在多年来每天使用大量的另一台服务器上,这种情况从未发生过一次,但没有人能够发现服务器中的什么差异可能首先阻止它发生。