Outlook VBAのタイミングユーザーフォームのクロージャー
-
29-10-2019 - |
質問
表示されるユーザーフォームを設定しようとしています、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
を使用すると、フォームが正しく表示されるようになりますが、望ましくない副作用が発生する可能性があります。必ず
他のヒント
このページカスタムタイマーアドインを提供します(。あなたのために働くかもしれない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
. 所属していません StackOverflow