0

我想在打开 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 代码。对这个问题有任何想法吗?谢谢

4

1 回答 1

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

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

于 2013-01-23T01:09:11.387 回答