لماذا يعرض المستخدم على أنه تنفيذ رمز إيقاف مشروط؟

StackOverflow https://stackoverflow.com/questions/1783906

  •  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

نهاية الفرعية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top