Progress bar in Userform
Progress bar in Userform
شريط الحالة داخل نموذج Userform
كيفية إنشاء شريط تقدم مخصص في نموذج مستخدم باستخدام Excel VBA ، حتى يمكننا مشاهدة تقدم وحدات الماكرو الخاصة بنا أثناء تشغيلها.
سيظهر شريط التقدم مثل الشريط أدناه. يمكن تخصيص الخطوط والألوان المستخدمة حسب رغبتك.
إنشاء شريط التقدم و Userform
أول شيء يتعين علينا القيام به هو إنشاء Userformوشريط التقدم.
سيكون شكل المستخدم هنا بسيطًا جدًا ، ولكن يمكن استخدام عناصر تحكم وصور أخرى حسب رغبتك.
سيتم إجراء شريط التقدم من 3 عناصر تحكم.
(( 1 Frame control و 2 label controls )).
سيكون الإطار حد شريط التقدم ، إنه الصندوق الرمادي الفاتح الذي يمكنك رؤيته .
بعد ذلك ، سيتم استخدام تصنيف واحد للشريط ، وتسمية أخرى للنص تُظهر النسبة المئوية مكتملة فوق الشريط.
قم بالتبديل إلى Visual Basic Editor بالضغط على Alt + F11 أو النقر فوق علامة التبويب المطور(Developer tab) ثم Visual Basic.
انقر فوق "إدراج Insert " ثم "Userform".
باستخدام الإطار "خصائص Properties window"
(إذا لم يتم عرض الإطار "Properties window" ، انقر فوق "عرض View "> "إطار خصائص Properties window")
أدخل اسمًا وتسمية توضيحية لشكل المستخدم الخاص بك.
في الصورة أدناه ، يمكنك رؤية أن اسم المستخدم الخاص بي هو Progress ، واستخدمت التسمية التوضيحية
لـ Macro Progress .
سيتم تسمية عناصر التحكم هذه أيضًا باستخدام الإطار "خصائص Properties window" لكل منها.
تم حذف التسمية التوضيحية لكل عنصر تحكم.
انقر فوق الزر Frame الموجود في Toolbox ، ثم انقر واسحب لرسمه على Userform.
قمت بتسمية الإطار الخاص بي بـ "Border".
لقد قمت أيضًا بإدخال العرض في 200 (سيتم استخدام هذا لاحقًا).
انقر فوق Label button وارسم ذلك داخل الإطار.
سيكون هذا التصنيف هو الشريط ، لذلك سمّيتُه Bar.
انقر فوق الخاصية BackColor وحدد لونًا ترغب في استخدامه للشريط.
انقر فوق الزر Label مرة أخرى وارسم هذا فوق شريط التقدم.
سيوضح هذا الرقم النسبة المئوية كاملة ، لذلك سميت ذلك بالـ Text.
تحديث شريط التقدم مع تقدم الماكرو
الآن بعد أن أصبح لدينا الشريط الفعلي على نموذج المستخدم (لا يبدو كثيرًا حتى الآن) ، نحتاج إلى تغيير العرض تلقائيًا كلما تقدم الماكرو.
قم بإدخال وحدة تعليمات برمجية جديدة عن طريق النقر فوق Insert> Module.
في هذه الوحدة ، قم بإدخال التعليمة البرمجية التالية ، والتي سيتم شرحها.
هذا الماكرو هو بسيط يقوم بإجراء حلقات عبر كل صف من الورقة
يقوم بضرب قيمة العمود 6 (العمود F) فى قيمة العمود 7 (العمود G) ، واظهار النتائج بالعمود 10 (العمود J).
نحن لا نهتم بهذا ، بل هو مجرد رمز للحفاظ على الماكرو مشغولًا حتى يمكننا رؤية شريط التقدم يعمل بشكل صحيح.
'Permits any person to use this code provided that the source is mentioned
'https://elshriefacademy.blogspot.com
Sub ProgressBar()
Dim i As Long
Dim TotalRows As Long
Dim CurrentProgress As Double
Dim ProgressPercentage As Double
Dim BarWidth As Long
i = 2
TotalRows = Application.CountA(Range("A:A"))
Call InitProgressBar
Do While i <= TotalRows
Cells(i, 10).Value = Cells(i, 6).Value * Cells(i, 7).Value
CurrentProgress = i / TotalRows
BarWidth = Progress.Border.Width * CurrentProgress
ProgressPercentage = Round(CurrentProgress * 100, 0)
Progress.Bar.Width = BarWidth
Progress.Text.Caption = ProgressPercentage & "% Complete"
DoEvents
i = i + 1
Loop
Unload Progress
End Sub
Sub InitProgressBar()
With Progress
.Bar.Width = 0
.Text.Caption = "0% Complete"
.Show vbModeless
End With
End Sub
هناك اثنان من الشفرات هنا. واحد يسمى ProgressBar وآخر يسمى InitProgressBar.
الفرعي الأساسي هو ProgressBar ويبدأ ذلك عن طريق إعلان 3 متغيرات.
هذه هي CurrentProgress ليتم استخدامها لحساب التقدم من خلال الماكرو BarWidth لحساب العرض الذي يجب أن يكون شريط التقدم به.
و ProgressPercentage لتخزين التقدم خلال الماكرو كنسبة مئوية (هذا من أجل تسمية النص أعلى شريط التقدم).
Dim CurrentProgress As Double
Dim ProgressPercentage As Double
Dim BarWidth As Long
ثم قبل بدء الحلقة ، نقوم بإستدعاء الماكرو InitProgressBar.
Call InitProgressBar
يتم استخدام هذا الماكرو تهيئة شريط التقدم على Userform.
يقوم بتعيين عرض الشريط إلى 0 ، والنص إلى 0٪ ثم الأهم من ذلك يوضح شكل المستخدم.
With Progress
.Bar.Width = 0
.Text.Caption = "0% Complete"
.Show vbModeless
End With
يتم تعيين Userform لتكون غير مشروطة.
وهذا يعني أنه يمكن للمستخدم التفاعل مع الأجزاء الأخرى من جدول البيانات أثناء فتح نموذج المستخدم.
لاحظ أن الأشكال المشروطة لا تسمح بذلك.
ثم نحسب التقدم خلال الماكرو .
يتم إدخال هذا داخل الحلقة حتى بعد كل صف من الحلقة ، يكون المستخدم على علم بتقدم الماكرو.
CurrentProgress = i / TotalRows
BarWidth = Progress.Border.Width * CurrentProgress
ProgressPercentage = Round(CurrentProgress * 100, 0)
Progress.Bar.Width = BarWidth
Progress.Text.Caption = ProgressPercentage & "% Complete"
يتم احتساب CurrentProgress عن طريق قسمة رقم الصف الحالي (i variable) على العدد الإجمالي للصفوف.
يوجد 3671 صفًا في هذه الورقة.
إذا كنت في الصف 2523 ، فأنت تفعل 2523/3671 الذي ينتج 1.4550138724 خلال الماكرو.
بمجرد معرفة ذلك ، يمكننا معرفة عرض شريط التقدم بضرب عرض الحد لهذه القيمة.
أقوم بتعيين عرض عنصر التحكم الإطار المسمى الحدود إلى 200 ، لذلك سيكون هذا 200 * 1.4550138724.
يتم تعيين الإجابة 291.00277448 لمتغير BarWidth.
ثم نحسب التقدم كنسبة مئوية بضرب القيمة CurrentProgress بمقدار 100.
يتم استخدام الدالة ROUND لتقريب هذا الرقم إلى 0 عشرية.
يتم تعيين هذه النتائج للمتغير ProgressPercentage لاستخدامه في تسمية النص.
يتم بعد ذلك تحديد عرض شريط التقدم والتسمية التوضيحية لتصنيف النص.
الجزء الأخير من التعليمات البرمجية هو ثم بيان DoEvents.
هذا يضمن أن الأحداث لا يزال يمكن أن تحدث أثناء تشغيل الماكرو.