سؤال

لقد قمت بإنشاء مولد تقرير قاعدة بيانات في Excel.أحاول إنشاء مربع حوار يعرض معلومات الحالة أثناء تشغيل البرنامج.

عندما أقوم بإنشاء التقرير، على الرغم من ظهور مربع الحوار، لا يمكنني تحديث/تحديث المعلومات التي يعرضها.في أغلب الأحيان، يظهر مربع الحوار جزئيًا فقط.لقد حاولت استخدام طريقة .repaint، لكن مازلت أحصل على نفس النتائج.لا أرى مربع الحوار الكامل إلا بعد إنشاء التقرير.

هل كانت مفيدة؟

المحلول

يعمل الكود أدناه بشكل جيد عند تنفيذ الإجراءات داخل Excel (XP أو الأحدث).

بالنسبة للإجراءات التي تتم خارج برنامج Excel، على سبيل المثال الاتصال بقاعدة بيانات واسترداد البيانات، فإن أفضل ما يقدمه هذا هو فرصة عرض مربعات الحوار قبل الإجراء وبعده (على سبيل المثال: "الحصول على البيانات", "حصلت على البيانات")

قم بإنشاء نموذج يسمى "حالة frm", ، ضع ملصقًا على النموذج المسمى "التسمية 1".

قم بتعيين خاصية النموذج 'ShowModal' = خطأ, ، وهذا يسمح بتشغيل التعليمات البرمجية أثناء عرض النموذج.

Sub ShowForm_DoSomething()

    Load frmStatus
    frmStatus.Label1.Caption = "Starting"
    frmStatus.Show
    frmStatus.Repaint
'Load the form and set text

    frmStatus.Label1.Caption = "Doing something"
    frmStatus.Repaint

'code here to perform an action

    frmStatus.Label1.Caption = "Doing something else"
    frmStatus.Repaint

'code here to perform an action

    frmStatus.Label1.Caption = "Finished"
    frmStatus.Repaint
    Application.Wait (Now + TimeValue("0:00:01"))
    frmStatus.Hide
    Unload frmStatus
'hide and unload the form

End Sub

نصائح أخرى

حاول إضافة أ DoEvents الاتصال في الحلقة الخاصة بك.من المفترض أن يسمح ذلك للنموذج بإعادة الرسم وقبول الطلبات الأخرى.

لقد استخدمت شريط الحالة الخاص ببرنامج Excel (في أسفل يسار النافذة) لعرض معلومات التقدم لتطبيق مماثل قمت بتطويره في الماضي.

إنه يعمل بشكل جيد جدًا إذا كنت تريد فقط عرض التحديثات النصية حول التقدم، ويتجنب الحاجة إلى مربع حوار التحديث على الإطلاق.

حسنًاJonnyGold، إليك مثال على نوع الشيء الذي استخدمته...

Sub StatusBarExample()
    Application.ScreenUpdating = False 
    ' turns off screen updating
    Application.DisplayStatusBar = True 
    ' makes sure that the statusbar is visible
    Application.StatusBar = "Please wait while performing task 1..."
    ' add some code for task 1 that replaces the next sentence
    Application.Wait Now + TimeValue("00:00:02")
    Application.StatusBar = "Please wait while performing task 2..."
    ' add some code for task 2 that replaces the next sentence
    Application.Wait Now + TimeValue("00:00:02")
    Application.StatusBar = False 
    ' gives control of the statusbar back to the programme
End Sub

أتمنى أن يساعدك هذا!

أدخل ورقة فارغة في المصنف الخاص بك إعادة تسمية الورقة على سبيل المثال."معلومة"

Sheets("information").Select
Range("C3").Select
ActiveCell.FormulaR1C1 = "Updating Records"
Application.ScreenUpdating = False
Application.Wait Now + TimeValue("00:00:02")

متابعة الماكرو

Sheets("information").Select
Range("C3").Select
Application.ScreenUpdating = True
ActiveCell.FormulaR1C1 = "Preparing Information"
Application.ScreenUpdating = False
Application.Wait Now + TimeValue("00:00:02")

متابعة الماكرو

إلخ بدلاً من ذلك ، حدد خلية فارغة في مكان ما على الورقة الموجودة بدلاً من إدخال ورقة جديدة

Range("C3").Select
ActiveCell.FormulaR1C1 = "Updating Records"
Application.ScreenUpdating = False
Application.Wait Now + TimeValue("00:00:02")

إلخ

مربع الحوار يعمل أيضًا على نفس مؤشر ترابط واجهة المستخدم.لذلك، فهو مشغول جدًا بحيث لا يتمكن من إعادة طلاء نفسه.لست متأكدًا مما إذا كان VBA يتمتع بقدرات جيدة لتعدد العمليات.

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