أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA الجزء الثاني
هذه التدوينة عبارة عن جزء ثاني من سلسلة أساسيات VBA إكسل : كيفية استخدام أدوات المراقبة أو التحكم في VBA
أزرار الخيارات
على عكس
مربعات الاختيار ، يمكن للمستخدم اختيار زر اختيار واحد فقط لكل مجموعة.
سيكون عليك فصل أزرار الخيارات هنا إلى مجموعتين ثم حفظ النتائج في خليتين
الخطوة الأولى ستكون إنشاء مجموعات الأزرار (لأنه سيمكننا فقط تحديد إجابة واحدة فقط من بين 8 إجابات على سبيل المثال.
للقيام بذلك ،
حدد أول 4 عناصر تحكم وأدخل قيمة في الخاصية GroupName :
ثم نكرر
العملية لعناصر التحكم الأربعة الأخرى بإدخال قيم مختلفة.
يمكننا الآن
تحديد إجابة واحدة لكل مجموعة.
لتسجيل الاجابات في خلايا الورقة ، سنضيف الحدث أولاً Click لزر Enregistrer
ثم نضيف حلقة
لكل مجموعة من أزرار الخيارات ونقوم بتسجيل المعلومات عندما تكون قيمة التحكم True
End Sub
ولكن بدلاً من حفظ الخيار بتنسيق نصي ، سنقوم بدلاً من ذلك بحفظ رقمه من 1 إلى 4:
End Sub
إذا كنا نريد
أن يكون النموذج صالحًا فقط عندما يجيب المستخدم على السؤالين ، فإن أحد الحلول هو
تسجيل اختيار كل مجموعة في متغير ، ثم نتحقق مما إذا كان هناك اختيار لكل من
المتغيرين وحفظ الخيارات في الخلايا:
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
هذه هي نقطة
البداية لهذا المثال الجديد:
عند تشغيل 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) NextEnd Sub
عند تغيير
التحديد في القائمة المنسدلة ، يجب بعد ذلك عرض قائمة المدن المقابلة للبلد
المختار في منطقة القائمة.
للقيام بذلك ،
نحتاج إلى معرفة رقم العمود وكذلك عدد المدن في هذا العمود.
الخاصية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