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オブジェクト(プロジェクトエクスプローラーのオブジェクトのリストから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 に答える