gpt4 book ai didi

excel - 使用VBA停止求解器更新状态栏

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

我正在运行一个大型优化过程,我想检查状态。优化大致基于求解器循环。我通过使用状态栏插入了它当前在代码中的位置。但是,解算器劫持了状态栏,因此我看不到当前状态栏的更新。关于如何抑制解算器劫持状态栏的想法?

最佳答案

你无法做到这一点,至少在没有一些严重的 Win32 黑客攻击的情况下无法做到这一点 - 例如,劫持 Windows 消息循环并拦截更新状态栏的消息......这通常不会很好地结束,并导致访问冲突崩溃以及您确实不想在 VBA 中处理的各种事情。

但是,您可以做的是在不触摸状态栏的情况下报告进度。

您可以使用 ProgressIndicator 来做到这一点模态用户窗体(我去年写过那篇文章)。

其关键在于将宏变成“调度程序”:

Public Sub MyMacro()
With ProgressIndicator.Create("DoSolverWork", canCancel:=True)
.Execute
End With
End Sub

现在 DoSolverWork 可能如下所示:

Public Sub DoSolverWork(ByVal progress As ProgressIndicator)
Const steps As Long = 10000
Dim i As Long
For i = 1 To steps ' whatever your loop does
If ShouldCancel(progress) Then
'here more complex worker code could rollback & cleanup
Exit Sub
End If

' do work here

progress.Update i / steps
Next
End Sub

Private Function ShouldCancel(ByVal progress As ProgressIndicator) As Boolean
If progress.IsCancelRequested Then
If MsgBox("Cancel this operation?", vbYesNo) = vbYes Then
ShouldCancel = True
Else
progress.AbortCancellation
End If
End If
End Function

关于excel - 使用VBA停止求解器更新状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54242299/

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