أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA الجزء الثاني

أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA الجزء الثاني



هذه التدوينة عبارة عن جزء ثاني من سلسلة أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA 


أزرار الخيارات 

على عكس مربعات الاختيار ، يمكن للمستخدم اختيار زر اختيار واحد فقط لكل مجموعة.

سيكون عليك فصل أزرار الخيارات هنا إلى مجموعتين ثم حفظ النتائج في خليتين

أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA الجزء الثاني


الخطوة الأولى ستكون إنشاء مجموعات الأزرار (لأنه سيمكننا فقط تحديد إجابة واحدة فقط من بين 8 إجابات على سبيل المثال.

للقيام بذلك ، حدد أول 4 عناصر تحكم وأدخل قيمة في الخاصية GroupName  :

أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA الجزء الثاني


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

يمكننا الآن تحديد إجابة واحدة لكل مجموعة.

لتسجيل الاجابات في خلايا الورقة ، سنضيف الحدث أولاً Click لزر Enregistrer

ثم نضيف حلقة لكل مجموعة من أزرار الخيارات ونقوم بتسجيل المعلومات عندما تكون قيمة التحكم True 

Private Sub CommandButton_valider_Click() Dim i As Integer 'Question 1 For i = 1 To 4 If Controls("OptionButton_a_" & i) Then Range("A2") = Controls("OptionButton_a_" & i).Caption Next 'Question 2 For i = 1 To 4 If Controls("OptionButton_b_" & i) Then Range("B2") = Controls("OptionButton_b_" & i).Caption Next 'Fermeture Unload Me

End Sub


أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA الجزء الثاني

ولكن بدلاً من حفظ الخيار بتنسيق نصي ، سنقوم بدلاً من ذلك بحفظ رقمه من 1 إلى 4:



Private Sub CommandButton_valider_Click() Dim i As Integer 'Question 1 For i = 1 To 4 If Controls("OptionButton_a_" & i) Then Range("A2") = i Next 'Question 2 For i = 1 To 4 If Controls("OptionButton_b_" & i) Then Range("B2") = i Next 'Fermeture Unload Me

End Sub

أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA الجزء الثاني


إذا كنا نريد أن يكون النموذج صالحًا فقط عندما يجيب المستخدم على السؤالين ، فإن أحد الحلول هو تسجيل اختيار كل مجموعة في متغير ، ثم نتحقق مما إذا كان هناك اختيار لكل من المتغيرين وحفظ الخيارات في الخلايا:

Private Sub CommandButton_valider_Click() Dim i As Integer, choix1 As Integer, choix2 As Integer 'Question 1 For i = 1 To 4 If Controls("OptionButton_a_" & i) Then choix1 = i Next 'Question 2 For i = 1 To 4 If Controls("OptionButton_b_" & i) Then choix2 = i Next 'Si 2 réponses If choix1 > 0 And choix2 > 0 Then 'Enregistrement Range("A2") = choix1 Range("B2") = choix2 'Fermeture Unload Me 'Si une ou plusieurs réponses manquantes Else 'Message d'erreur MsgBox "Vous devez répondre à toutes les questions avant de valider le formulaire.", 48, "Erreur" End If End Sub



القائمة المنسدلة COMBOBOX أو ومربع القائمة أوLISTBOX 


هذه هي نقطة البداية لهذا المثال الجديد:


أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA الجزء الثاني


عند تشغيل UserForm ، نريد تحميل البلدان الأربعة في القائمة المنسدلة

Private Sub UserForm_Initialize() Dim i As Integer 'Boucle pour ajouter les 4 pays à la liste déroulante For i = 1 To 4 ComboBox_pays.AddItem Cells(1, i) Next

End Sub


أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA الجزء الثاني


عند تغيير التحديد في القائمة المنسدلة ، يجب بعد ذلك عرض قائمة المدن المقابلة للبلد المختار في منطقة القائمة.

للقيام بذلك ، نحتاج إلى معرفة رقم العمود وكذلك عدد المدن في هذا العمود.

الخاصيةListIndex من القائمة المنسدلة تتوافق مع رقم التحديد في القائمة .

علما أن ListIndex يبدأ من 0 ، وبالتالي فإن رقم العمود هو:

colonne = ComboBox_Pays.ListIndex + 1

للحصول على عدد الصفوف في عمود البلد المختار ، يمكننا العثور على رقم صف الخلية الأخيرة من كتلة خلية غير فارغة ، مثل هذا:

nbLignes = Cells(1, colonne).End(xlDown).Row

بفضل هذه المعلومات ، أصبح من الممكن الآن إنشاء الحدث Change من القائمة المنسدلة:

Private Sub ComboBox_Pays_Change() Dim colonne As Integer, nbLignes As Integer 'Zone de liste vidée (sinon les villes sont ajoutées à la suite) ListBox_villes.Clear 'Numéro de la sélection colonne = ComboBox_pays.ListIndex + 1 'Si le numéro de colonne = 0 (donc si aucun pays sélectionné) la procédure est quittée If colonne = 0 Then Exit Sub 'Nombre de lignes de la colonne du pays choisi nbLignes = Cells(1, colonne).End(xlDown).Row 'Boucle pour ajouter les villes dans la zone de liste For i = 2 To nbLignes ListBox_villes.AddItem Cells(i, colonne) Next End Sub

ثم كل ما علينا فعله هو إضافة حدث عند النقر فوق الزرValiderلمعالجة هذه المعلومات

في هذه الحالة ، مثال بسيط للتحديد في مربع حوار:

Private Sub CommandButton_valider_Click() MsgBox "Ville sélectionnée : " & ListBox_villes '(propriété Value de ListBox_villes) End Sub

أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA الجزء الثاني




Comments
No comments
Post a Comment



    Reading Mode :
    Font Size
    +
    16
    -
    lines height
    +
    2
    -