gpt4 book ai didi

快速连续单击宏按钮时 Excel 间歇性崩溃

转载 作者:行者123 更新时间:2023-12-02 09:16:18 25 4
gpt4 key购买 nike

当快速连续单击 VBA 宏按钮(不是 AcitveX 按钮)时,Excel“有时”会崩溃。

VBA 代码大量使用对象模块,因此我认为这是垃圾收集问题。在退出按钮单击宏之前,我明确地将顶级对象设置为空,认为这会强制进行垃圾收集。那没有用。

这非常令人沮丧,因为它是间歇性的。也许 10 到 20 次中有 1 次。

显示的代码只是按钮单击处理程序。此处理程序调用了大约 10,000 行代码,我没有显示这些代码。 VBA 代码从工作表中读取信息,进行一些计算,更新工作表上的 Excel 图表,并将一些数据写回工作表。我通常会关闭事件和屏幕更新。

我只是希望其他人遇到过快速宏执行导致 Excel 崩溃的情况。同样,VBA 代码运行良好,这似乎是更高级别的 Excel 问题?

Public Sub Clicked_UpdateWall_C()
Dim Wall As New CWall_C
Dim ExecutionSuccess As Boolean
Dim errstr As String

ExecutionSuccess = CheckUnits(ActiveSheet.Name, errstr)

If ExecutionSuccess Then ExecutionSuccess = Wall.UpdateWall(ActiveSheet.Name, errstr)

Call CheckError(ExecutionSuccess, errstr)

' This is an attempt to force excel to do garbage collection
Set Wall = Nothing
End Sub

错误消息是“Excel 已停止工作”,而不是 VBA 运行时错误。可以点击错误对话框中的“重新启动excel”按钮,excel会重新启动,一般情况下不会丢失工作。

由于它是间歇性的,我无法发布确切的 Excel 崩溃对话框文本。

最佳答案

When a VBA macro button (not AcitveX button) is clicked in rapid succession Excel "sometimes" crashes.

黑暗中的一枪。尝试这个。将您的代码替换为 '~~> 其余代码。现在无论您连续点击多少次,都不会发生任何事情。

Option Explicit

Dim DoNotRunProc As Boolean

Public Sub Clicked_UpdateWall_C()
If DoNotRunProc = True Then Exit Sub

DoNotRunProc = True

On Error GoTo Whoa

'
'~~> Rest of your code
'

Whoa:
DoNotRunProc = False
End Sub

注意:如果您的代码中有单独的错误处理程序,请相应地调整上述代码。

关于快速连续单击宏按钮时 Excel 间歇性崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com