Outlook VBA توقيت إغلاق نموذج المستخدم
-
29-10-2019 - |
سؤال
أحاول إعداد نموذج مستخدم سيظهر ويبقى لمدة 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
ومع ذلك، نظرًا لأن Outlook لا يتعرف على الملف OnTime
الطريقة، لقد كنت أحاول استخدام Timer
إفادة:
Sub example2()
Strt = Timer
Do While Timer < Strt + 10
UserForm2.Show
Loop
UserForm2.Hide
End Sub
المشكلة في ذلك هي أنه عند فتح نموذج المستخدم، يتوقف الماكرو (بما في ذلك الحلقة) مؤقتًا حتى يتم إغلاق نموذج المستخدم يدويًا...
أي مساعدة في حل بديل لهذا سيكون موضع تقدير كبير.
هتافات!
المحلول
لقد أجريت بعض الاختبارات ويبدو أن المشكلة تكمن في أنه بمجرد إظهار نموذج المستخدم، فإنه يتولى التحكم ولا يعيده إليه 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 هي قراءة مثيرة للاهتمام ولكن ليس بالضرورة حول 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