vba - 中断宏以处理击键以获得流畅的用户体验

标签 vba excel error-handling keyboard-events

我正在研究一个宏,它在 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

以下两个选项中的任何一个都好吗?
  • 有一个 application_onkey 事件引发一个带有用户定义的错误代码的错误标志和一个错误处理程序,该子程序在此特定错误时退出
  • 测量自上述子程序在代码中有趣的点开始并在足够大以威胁用户体验后退出的时间?
  • 最佳答案

    正如 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/

    相关文章:

    VBA Internet 自动化代码在 ie.Visible = False 时不起作用

    VBA 验证。添加方法失败

    windows - 如何从Powershell到Ansible获取负返回码

    android - 针对 4xx 错误的 Retrofit 2 同步调用错误处理

    asp.net-mvc - MVC错误页面在部分 View 中加载

    xml - 使用 vba 编写复杂的命名空间 xml

    excel - 使用 VBA 正则表达式删除模式中的空格

    excel - 如何格式化日期时间以便 Excel 能够理解它?

    python - OpenPyXL - 检查某个单词是否存在于单元格内的一系列单词中

    excel - 用 awk 实现类似 Excel-vlookup 的函数