2011-12-07 70 views
2

我試圖設置一個用戶窗體,它將出現,保持10秒鐘,然後自動關閉。 我以前在Excel中做到了這一點,使用OnTime方法:Outlook VBA定時關閉用戶表單

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 

與此問題是,當用戶窗體打開時,宏(包括循環)暫停,直到用戶窗體手動關閉...

對此解決方法的任何幫助將很多讚賞。

乾杯!

+0

你能解釋你的目標嗎?這可能會澄清事情並提供更好的解決方案。 – JimmyPena

+0

@JP我正在實現數據驗證過程的自動化,並需要構建自動化進度和可能影響結果的任何錯誤的通知。但是,由於該流程通常在沒有任何人監控的情況下運行,因此我需要任何通知自動關閉,以便驗證可以繼續。我試圖擺脫'msgbox',這樣當我需要擴展它們或者構建更復雜時,我可以在通知中獲得更大的靈活性。 –

回答

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將確保形式顯示正確,但可能有一些有害的副作用。確保閱讀Jeff Atwood的this Microsoft articleblog post是一個有趣的閱讀,但不一定關於VBA。

+0

謝謝馬特,作品像一個魅力。 –

1

This page提供了一個自定義計時器加載項(.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 
+0

感謝您的Kaveman,但不幸的是,我需要這個沒有定製插件運行... –