لماذا يعرض المستخدم على أنه تنفيذ رمز إيقاف مشروط؟
-
21-09-2019 - |
سؤال
يتوقف رمز VBA التالي عند Me.Show
. من اختباراتي ، يبدو ذلك Me.Show
يوقف جميع تنفيذ التعليمات البرمجية ، حتى لو كان الرمز داخل UserForm.
هذا الجزء خارج نطاق المستخدم:
Public Sub TestProgress()
Dim objProgress As New UserForm1
objProgress.ShowProgress
Unload objProgress
End Sub
هذا الجزء داخل أداة المستخدم:
Private Sub ShowProgress()
Me.Show vbModal
Dim intSecond As Integer
For intSecond = 1 To 5
Application.Wait Now + TimeValue("0:00:01")
Me.ProgressBar1.Value = intSecond / 5 * 100
Next intSecond
Me.Hide
End Sub
يتوقف الرمز عند Me.Show
, ، بعد عرض المستخدم. لا يوجد خطأ ، فهو مجرد توقف عن تنفيذ التعليمات البرمجية. يبدو أن الطريقة الوحيدة لتنفيذ التعليمات البرمجية داخل أداة المستخدم الوسائط في VBA هي تضمينه في إجراء userform_activate مثل هذا:
هذا الجزء خارج نطاق المستخدم:
Public Sub TestProgress()
Dim objProgress As New UserForm1
Load objProgress
Unload objProgress
End Sub
هذا الجزء داخل أداة المستخدم:
Private Sub UserForm_Initialize()
Me.Show vbModal
End Sub
Private Sub UserForm_Activate()
Dim intSecond As Integer
For intSecond = 1 To 5
Application.Wait Now + TimeValue("0:00:01")
Me.ProgressBar1.Value = intSecond / 5 * 100
Next intSecond
Me.Hide
End Sub
بالطبع ، لا يمكنني وضع Me.Show
داخل userform_active لأن هذا الإجراء يطلق النار فقط بعد حدث عرض المستخدم.
الوثائق ل UserForm.ShowModal
يقول "عندما يكون المستخدم وسيطًا ، يجب على المستخدم توفير المعلومات أو إغلاق UserForm قبل استخدام أي جزء آخر من التطبيق. لا يتم تنفيذ رمز لاحق حتى يتم إخفاء أو تفريغ نموذج المستخدم."
أحاول استخدام نظام الاستخدام المشروط كشريط تقدم لمنع المستخدم من التفاعل مع التطبيق أثناء تشغيل العملية. ولكن سيكون من الصعب تحقيق ذلك إذا كان كل رمز الخاص بي يجب أن يكون ضمن إجراء userform_activate.
نسيت شيئا ما هنا؟ لماذا يتوقف كل تنفيذ التعليمات البرمجية عند Me.Show
?
المحلول 3
أعتقد أنني اكتشفت هذا.
بعد Me.Show
userform_activate حرائق الحدث. إذا لم يكن هناك رمز في إجراء userform_activate ، فلن يحدث شيء لأن VBA تنتظر Me.Hide
.
لذا فإن ترتيب الأحداث هو: Me.Show
> UserForm_Activate
> Me.Hide
يجب أن يكون أي رمز أريد تشغيله في إجراء userform_active ويجب أن يكون قبل Me.Hide
.
الهيكل صارم للغاية ، لكنني قد أكون قادرًا على استخدام هذا الهيكل لصالحي.
نصائح أخرى
عندما يتم عرض النموذج مع vbModal
, ، سوف يعلق الرمز التنفيذ وينتظر تفاعل المستخدم مع النموذج. على سبيل المثال النقر فوق زر أو استخدام القائمة المنسدلة.
إذا قمت بتحديث خاصية النموذج
ShowModal = False
وإزالة vbModal
من الكود الخاص بك. سيسمح ذلك بتنفيذ التعليمات البرمجية للاستمرار عند عرض النموذج.
كنت أبحث عن إجابة عن سبب حصولني على الخطأ التالي:
خطأ وقت التشغيل "5": استدعاء أو وسيطة إجراء غير صالح
عند تشغيل هذا السطر من الكود:
UserForm1.Show True
على الرغم من أن هذا الخط يعمل:
UserForm1.Show False
بالتاكيد. حقيقي ليس هو نفسه vbmodal! لذا فإن الإجابة البسيطة هي استخدام التعدادات الصحيحة:
UserForm1.Show vbModal
UserForm1.Show vbModeless
أعتقد أنني اكتشفت ذلك ، حاول القيام بهذه الخطوة البسيطة فيك ، انقر بزر الماوس الأيمن على الجزء المصرفي وانقر فوق خصائص تغيير "العرض" إلى رمز False أو في VBA عند عرض المستخدم باستخدام الرمز التالي:
userform1.show false
لا أعرف حقًا ما الذي يحدث في ذهنك لأن هناك مجموعة واسعة من التعليمات البرمجية لما تطلبه ولكن آمل أن يساعد هذا
خاص cmdswitch_click () userform1.hide userform2.show
نهاية الفرعية