JavaScript is not enabled!...Please enable javascript in your browser

جافا سكريبت غير ممكن! ... الرجاء تفعيل الجافا سكريبت في متصفحك.

-->
الصفحة الرئيسية

كيفية إنشاء عناصر تحكم ديناميكية في UserForm باستخدام VBA في Excel

 

بسم الله الرحمن الرحيم

اهلا بكم متابعى موقع عالم الاوفيس

كيفية إنشاء عناصر تحكم ديناميكية في UserForm باستخدام VBA في Excel 

  



في عالم تحليل البيانات وأتمتة المهام باستخدام Excel، يعد استخدام VBA (Visual Basic for Applications) أداة قوية لإنشاء واجهات مستخدم تفاعلية. في هذا المقال، سنتعلم كيفية إنشاء `TextBox` و`Label` ديناميكيًا في `UserForm` باستخدام VBA، مع استخراج أسماء الـ `Label` من خلايا محددة في ورقة عمل Excel. هذا الأسلوب مفيد جدًا عند إنشاء نماذج ديناميكية تعتمد على بيانات متغيرة.


  1.   المحتويات: 
  2. -  إنشاء UserForm في Excel   
  3. -  VBA لإنشاء عناصر تحكم ديناميكية   
  4. -  إضافة TextBox وLabel تلقائيًا   
  5. -  استخدام VBA لأتمتة Excel   
  6. -  إنشاء نماذج تفاعلية في Excel   
  7. -  قراءة بيانات الخلايا في VBA   
  8. -  تحديد آخر عمود به بيانات في Excel   
  9. -  برمجة واجهات مستخدم في Excel   
  10. -  أتمتة المهام باستخدام VBA   
  11. -  نصائح لبرمجة Excel متقدمة   

 

   1.  ما هو UserForm في Excel؟   

`UserForm` هي نافذة تفاعلية يمكن إنشاؤها باستخدام VBA لتسهيل إدخال البيانات أو عرض المعلومات للمستخدم. يمكن إضافة عناصر تحكم مثل `TextBox`، `Label`، `Button`، وغيرها لجعل النموذج أكثر تفاعلية.

 

   2.  لماذا نستخدم عناصر تحكم ديناميكية؟   

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

 

   3.  كيفية إنشاء UserForm وعناصر تحكم ديناميكية   

في هذا المقال، سنستخدم الكود التالي لإنشاء `UserForm` يحتوي على `Label` و`TextBox` ديناميكيًا. يتم استخراج أسماء الـ `Label` من خلايا محددة في ورقة عمل Excel، بدءًا من الخلية `A2` وحتى آخر عمود به بيانات في الصف الثاني.

 

   4.  خطوات تنفيذ الكود   

1.  تحديد آخر عمود به بيانات : يتم استخدام الدالة `End(xlToLeft)` لتحديد آخر عمود يحتوي على بيانات في الصف الثاني.

2.  قراءة أسماء الـ Label : يتم قراءة أسماء الـ `Label` من النطاق `A2` إلى آخر عمود في الصف الثاني.

3.  إنشاء UserForm وعناصر التحكم : يتم استخدام حلقة `For` لإضافة `Label` و`TextBox` تلقائيًا بناءً على عدد الأسماء.

4.  عرض UserForm : يتم عرض النموذج للمستخدم بعد إنشائه.

 

   5.  فوائد استخدام هذا الأسلوب   

-  مرونة عالية : يمكن تعديل النموذج تلقائيًا بناءً على تغييرات البيانات.

-  توفير الوقت : لا حاجة لإضافة العناصر يدويًا في كل مرة.

-  تفاعلية أفضل : يمكن للمستخدمين إدخال البيانات بسهولة عبر واجهة مخصصة.

 

   6.  نصائح لتحسين الكود   

-  إضافة تحقق من البيانات : تأكد من صحة البيانات المدخلة قبل معالجتها.

-  تحسين واجهة المستخدم : يمكن إضافة ألوان أو خطوط مختلفة لجعل النموذج أكثر جاذبية.

-  تخصيص النموذج : يمكن إضافة عناصر تحكم إضافية مثل `ComboBox` أو `CheckBox` حسب الحاجة.

 

، يمكنك استخدام الكود التالي:

 الكود

Sub CreateDynamicControlsWithLabelsFromSheet()

    Dim UserForm As Object

    Dim i As Integer

    Dim numControls As Integer

    Dim topPosition As Integer

    Dim leftPosition As Integer

    Dim verticalSpacing As Integer

    Dim ws As Worksheet

    Dim labelNames As Variant

    Dim lastCol As Long

   

    ' تعيين ورقة العمل (Sheet1)

    Set ws = ThisWorkbook.Sheets("Sheet1")

   

    ' تحديد آخر عمود به بيانات في الصف الثاني

    lastCol = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column

   

    ' قراءة أسماء الـ Label من الخلايا A2 إلى آخر عمود في الصف الثاني

    labelNames = ws.Range(ws.Cells(2, 1), ws.Cells(2, lastCol)).Value

   

    ' عدد العناصر التي تريد إضافتها (بناءً على عدد الأسماء في labelNames)

    numControls = UBound(labelNames, 2)

   

    ' إنشاء UserForm

    Set UserForm = ThisWorkbook.VBProject.VBComponents.Add(3) ' 3 يعني UserForm

   

    ' إعداد خصائص UserForm

    With UserForm

        .Properties("Caption") = "Dynamic Controls Form"

        .Properties("Width") = 300

        .Properties("Height") = 200

    End With

   

    ' تحديد المواضع الأولية والتباعد

    topPosition = 20

    leftPosition = 20

    verticalSpacing = 30

   

    ' حلقة لإضافة Label و TextBox

    For i = 1 To numControls

        ' إضافة Label

        With UserForm.Designer.Controls.Add("Forms.Label.1", "Label" & i)

            .Caption = labelNames(1, i) ' استخدام القيمة من الخلايا

            .Left = leftPosition

            .Top = topPosition

            .Width = 100

            .Height = 20

        End With

       

        ' إضافة TextBox

        With UserForm.Designer.Controls.Add("Forms.TextBox.1", "TextBox" & i)

            .Left = leftPosition + 110

            .Top = topPosition

            .Width = 100

            .Height = 20

        End With

       

        ' زيادة الموضع الرأسي للعنصر التالي

        topPosition = topPosition + verticalSpacing

    Next i

   

    ' عرض UserForm

    VBA.UserForms.Add(UserForm.Name).Show

End Sub

 

شرح الكود ا:

1.  تحديد آخر عمود به بيانات في الصف الثاني :

   - يتم استخدام `ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column` لتحديد آخر عمود يحتوي على بيانات في الصف الثاني.

 

2.  قراءة أسماء الـ Label من الخلايا :

   - يتم قراءة أسماء الـ Label من النطاق `A2` إلى آخر عمود في الصف الثاني باستخدام `ws.Range(ws.Cells(2, 1), ws.Cells(2, lastCol)).Value`.

 

3.  إضافة Label و TextBox :

   - يتم استخدام حلقة `For` لإضافة `Label` و`TextBox` بناءً على عدد الأسماء في `labelNames`.

   - يتم تعيين `Caption` لكل `Label` من القيم الموجودة في `labelNames

 كيفية استخدام الكود:

1. تأكد من وجود أسماء الـ Label في الخلايا من `A2` إلى آخر عمود في الصف الثاني في `Sheet1`. على سبيل المثال:

  •    - `A2`: "الاسم"
  •    - `B2`: "العمر"
  •    - `C2`: "العنوان"
  •    - `D2`: "الهاتف"

2. افتح Excel واضغط `Alt + F11` لفتح محرر VBA.

3. في نافذة VBA، اضغط `Insert` > `Module` لإضافة وحدة جديدة.

4. الصق الكود في الوحدة الجديدة.

5. أغلق محرر VBA وارجع إلى Excel.

6. اضغط `Alt + F8`، اختر `CreateDynamicControlsWithLabelsFromSheet`، ثم اضغط `Run`

 

 مثال الناتج:

إذا كانت الخلايا من `A2` إلى `D2` تحتوي على:

  • - `A2`: "الاسم"
  • - `B2`: "العمر"
  • - `C2`: "العنوان"
  • - `D2`: "الهاتف"

 

سيتم إنشاء `UserForm` يحتوي على:

  • - `Label` مع نص "الاسم" و`TextBox` بجانبه.
  • - `Label` مع نص "العمر" و`TextBox` بجانبه.
  • - `Label` مع نص "العنوان" و`TextBox` بجانبه.
  • - `Label` مع نص "الهاتف" و`TextBox` بجانبه.

 

 

 

 ملاحظات:

- يمكنك تغيير الصف (`2`) إلى أي صف تريده.

- إذا كنت تريد إضافة المزيد من العناصر مثل `CommandButton`، يمكنك استخدام نفس الطريقة مع `Forms.CommandButton.1`.

يعد استخدام VBA لإنشاء `UserForm` وعناصر تحكم ديناميكية في Excel طريقة فعالة لأتمتة المهام وتحسين تجربة المستخدم. من خلال الكود المقدم في هذا المقال، يمكنك إنشاء نماذج تفاعلية تعتمد على بيانات متغيرة بسهولة. جرب الكود بنفسك وقم بتعديله ليناسب احتياجاتك الخاصة.

لتحميل ملف العمل من هنا

 


قد يعجبك ايضا            


كلمات مفتاحية إضافية: 

  • -  برمجة VBA للمبتدئين   
  • -  إنشاء نماذج تفاعلية في Excel   
  • -  أتمتة إدخال البيانات باستخدام VBA   
  • -  نصائح لبرمجة Excel   
  • -  تعلم VBA خطوة بخطوة   
  • -  إنشاء واجهات مستخدم في Excel   
  • -  تحسين أداء Excel باستخدام VBA   
  • -  أمثلة عملية على VBA   
  • -  كود VBA جاهز للاستخدام   
  • -  تخصيص Excel باستخدام VBA   
  •  

الاسمبريد إلكترونيرسالة