2

表示され、10秒間表示された後、自動的に閉じるユーザーフォームを設定しようとしています。私は以前にExcelでOnTime次の方法 を使用してこれを実行しました。

Sub Example()
     Application.OnTime EarliestTime:=Now + TimeValue("00:00:10"), _ 
     Procedure:="Hide_userform2"
     UserForm2.Show
End Sub

Sub Hide_userform2()
     UserForm2.Hide
End Sub

OnTimeただし、Outlookはメソッドを認識しないため、次のTimerステートメントを使用しようとしています。

Sub example2()
Strt = Timer
Do While Timer < Strt + 10
    UserForm2.Show
Loop
UserForm2.Hide
End Sub

これに伴う問題は、ユーザーフォームを開くと、ユーザーフォームを手動で閉じるまでマクロ(ループを含む)が一時停止することです...

このための回避策についての助けをいただければ幸いです。

乾杯!

4

2 に答える 2

1

このページはあなたのために働くかもしれないカスタムタイマーアドイン(.xla)を提供します。これは、上記のコードと同じ考え方です(これはコードビハインドの形式になります)。

Dim WithEvents CountdownTimer As TMTimer.clsTimer

Private Sub startCounter()
    Set CountdownTimer = TMTimer.createTimer
    With CountdownTimer
        .CountdownDurationMilliSecs = 10 * 1000
        .TimerType = .TimerTypeCountdown
        .startTimer
    End With
End Sub

Private Sub CountdownTimer_CountdownComplete()
    Me.Hide
End Sub

Private Sub UserForm_Activate()
    startCounter
End Sub
于 2011-12-07T03:15:22.990 に答える
1

私はいくつかのテストを実行しましたが、問題は、ユーザーフォームを表示すると、それが制御を取得し、に戻らないことであるようexample2()です。

次のコードをフォームのサブに入れると、Acitvate正しく非表示になります。これはあなたが望むものと正確に一致しないかもしれません、あなたは他のもののためにフォームを使用しているかもしれません、そしてこのプロセスはそれを台無しにします、しかしそれはあなたを正しい方向に導きます。

Private Sub UserForm_Activate()
    Strt = Timer
    Do While Timer < Strt + 10
        DoEvents 'please read linked documentation on this
    Loop
    UserForm2.Hide
End Sub

を使用DoEventsすると、フォームが正しく表示されることを確認できますが、望ましくない副作用が発生する可能性があります。このMicrosoftの記事を必ず読んでください。また、 Jeff Atwoodによるブログ投稿は、必ずしもVBAについてではありませんが、興味深い読み物です。

于 2011-12-07T18:44:57.573 に答える