我正在研究一个宏,它在 excel 应用程序中的每个选择更改时在状态栏上显示单元格信息。 It has grown with the addition of new features thanks to help from members in here.所以现在有时焦点会停留在一个单元格上,在计算出要显示的单元格信息之前,我无法使用箭头键继续移动到附近的单元格。但我确实希望选择继续进行,以获得流畅的用户体验。我应该如何中断计算?
它在类模块中是这样的:
Private Sub Appl_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim InfoAboutTarget
InfoAboutTarget = GetInfoAbout(Target)
WriteInfoToStatusbar(InfoAboutTarget)
End Sub
以下两个选项中的任何一个都好吗?
最佳答案
正如 Dirk 所说,您应该使用 DoEvents
允许 excel 处理用户输入,并检测您长时间运行的代码是否被中断,如果是,则取消中断的执行,同时允许完成最近的调用。
这是一个示例来演示(编码在 ThisWorkbook
中)
Option Explicit
Dim abort As Boolean
Dim CallCount As Long
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
test Target
End Sub
Sub test(r As Range)
Dim i As Long, n As Long, b As Long
CallCount = CallCount + 1
n = 100
' simulate long running code
For i = 1 To n
DoEvents
If abort Then
GoTo AbortSub
End If
Application.StatusBar = CallCount & " " & r.Address & " " & i
Next
AbortSub:
' Abort all interrupted calls
If CallCount > 1 Then
abort = True
Else
abort = False
End If
CallCount = CallCount - 1
End Sub
关于vba - 中断宏以处理击键以获得流畅的用户体验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38985510/