当光标保留在更新的Excel单元格时,VBA代码不会运行

时间:2013-01-22 23:59:59

标签: excel excel-vba vba

我想在打开Excel工作簿20秒后显示一条消息。代码是:

//ThisWorkbook
Private Sub Workbook_Open()
    SetTimer
End Sub

//Module1
Public Sub SetTimer()
    Application.OnTime Now + TimeValue("00:00:20"), "ShowMsg"
End Sub

Public Sub ShowMsg()
    MsgBox ("my message")
End Sub

如您所见,代码非常简单,当用户不更新工作表或离开更新/关注的单元格时,它可以正常工作。但是,如果游标保留在单元格,则永远不会显示该消息。当单元格具有焦点或正在更新时,控件不会返回到VBA代码。对这个问题有什么想法吗?感谢

1 个答案:

答案 0 :(得分:1)

这是一种解决方法:

Sub main()

    Dim start As Single

    start = Timer

    Do
        DoEvents
    Loop Until Timer > (start + 20) '20 seconds
    MsgBox "hello"

End Sub

修改。进一步问题的代码:

在名为Module1的模块中,输入以下代码:

Public start As Single

Sub main2()

    start = Timer

    Do
        DoEvents
    Loop Until Timer > (start + 20) '20 seconds
    MsgBox "hello"

End Sub

在ThisWorkbook对象中(从Project Explorer中的对象列表中双击ThisWorkbook),输入以下代码:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Module1.start = Module1.start + 5
End Sub

每次更改工作簿中任何工作表中的任何单元格时,都会向计时器添加另外五秒钟。