質問

表示されるユーザーフォームを設定しようとしています、10秒間残り、自動的に閉じます。 OnTimeメソッドを使用して、Excelの前にこれを行いました:

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

Sub Hide_userform2()
     UserForm2.Hide
End Sub
.

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

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

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

これに対する回避策に関する援助は大歓迎です。

歓声!

役に立ちましたか?

解決

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

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

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

他のヒント

このページカスタムタイマーアドインを提供します(。あなたのために働くかもしれない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
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top