سؤال

أحاول إعداد نموذج مستخدم سيظهر ويبقى لمدة 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top