كيف أقوم بإنشاء مربع حوار الحالة في Excel
سؤال
لقد قمت بإنشاء مولد تقرير قاعدة بيانات في 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 يتمتع بقدرات جيدة لتعدد العمليات.