VBA - كيفية إنشاء مربع التحرير والسرد المتتالي في userform

VBA - كيفية إنشاء مربع التحرير والسرد المتتالي في userform

المقدمة

في هذه المقالة سوف تتعلم كيفية ملء مربع التحرير والسرد المتتالي باستخدام الأسلوب غير المباشر.

المتطلبات الأساسية

  • 1 مصنف
  • 1 UserForm
  • 3 combobox.

يمكنك أيضًا تنزيل نموذج مصنف هنا: //cjoint.com/14au/DHhootCLYVh.htm

إدارة الأسماء ضمن Excel

لتعريف الأسماء في مصنف Excel ، يمكنك إما:
  • Excel 2007 أو إصدار سابق: Insert> Names> Define .
  • بدءًا من Excel 2010: صيغ الشريط> حدد اسمًا.

رمز combobox

نريد حدوث ما يلي:
  • عند تحميل UserForm ، سيتم تعبئة ComboBox1.
  • سيتم تعبئة مربعات التحرير والسرد الأخرى بناءً على قيم أول واحد.

ملء القائمة الأولى

لتعبئة مربع تحرير وسرد بمحتويات نطاق مسمى من المصنف ، يكون بناء الجملة هو:
  • ComboBox1.List = Application.Transpose (Range ("monNom"))

لمسح مربع التحرير والسرد:

  • Combobox1.Clear

ما يعطينا رمز لملء القائمة المنسدلة الأولى في تحميل UserForm:

 Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub 

ملء القائمة الثانية

عند تحديد قيمة في القائمة المنسدلة الأولى ، فسوف يتوافق (النص الموضح في مربع التحرير والسرد) مع اسم المصنف.

لعرض محتويات خلايا النطاق المسمى ، سنستخدم الحدث Change:

 Private Sub ComboBox1_Change () 'Combobox département تجنب الأخطاء التي تم إنشاؤها عند حذف مستخدم لمحتوى ComboBox1 إذا ComboBox1.Value = "" ثم الخروج من Com ComBBox2.Clear ComboBox2.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) End الفرعية 

لمربع التحرير والسرد الثالث:

 كومبو بوكس ​​2_Change () الخاص كومبو كومبوكس إذا كومبو بوكس ​​2. فيال = "" ثم الخروج من كومبو بوكس ​​3. كومير كومبو بوكس ​​2003.List = Application.Transpose (Range (NomRange)) End Sub 

البق المشتركة

نطاق غير مسمى

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

 الدالة NomDefini (Nom As String) كأحرف معتمة منطقية باسم NomDefini = False لكل Noms في ThisWorkbook.Names If Noms.Name = Nom = NomDefini = True: Exit Function Next Noms End Function 

خطأ في إدخال البيانات

كما ستلاحظ في نموذج الملف ، لا يأخذ تحديد الأسماء في الاعتبار الأحرف الخاصة أو المسافات. في بعض الحالات ، قد تحتاج إلى تحرير المتغيرات:

إليك مثال:

 دالة CaracSpec (Nom As String) باسم سلسلة CaracSpec = استبدال (Nom، ""، "_") CaracSpec = استبدال (CaracSpec، "-"، "_") وظيفة النهاية 

الرمز المكتمل

 الخيار Explicit Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Private Sub ComboBox1_Change () 'Combobox département If ComboBox1.Value = "" ثم إنهاء Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox1.Value) If NomDefini (NomRange) ثم ComboBox2.List = Application.Transpose (Range (NomRange)) Else ComboBox2.AddItem "" End If End Sub Private Sub ComboBox2_Change () 'Combobox communes If ComboBox2.Value = "" ثم إنهاء Sub ComboBox3.Clear Dim NomRange باسم String NomRange = CaracSpec (ComboBox2.Value) إذا NomDefini (NomRange) ثم ComboBox3.Lpose = التطبيق (Range (NomRange)) Elbo ComboBox3.AddItem "" "Aucune rue" "" End If End Sub Function NomDefini (Nom As String) باسم Dim Boolean Dim Noms As Name NomDefini = False For Noms In ThisWorkbook.Names If Nom Then NomDefini = صواب: إنهاء الدالة التالي Noms End Function Function Carac Spec (Nom As String) باسم String CaracSpec = استبدال (Nom، ""، "_") CaracSpec = استبدال (CaracSpec، "-"، "_") وظيفة النهاية 

رابط التحميل

قم بتنزيل نموذج الورقة على هذا الرابط: //cjoint.com/؟DHhootCLYVh

VBA - كيفية إنشاء مربع التحرير والسرد المتتالي في userform

المقدمة

في هذه المقالة سوف تتعلم كيفية ملء مربع التحرير والسرد المتتالي باستخدام الأسلوب غير المباشر.

المتطلبات الأساسية

  • 1 مصنف
  • 1 UserForm
  • 3 combobox.

يمكنك أيضًا تنزيل نموذج مصنف هنا: //cjoint.com/14au/DHhootCLYVh.htm

إدارة الأسماء ضمن Excel

لتعريف الأسماء في مصنف Excel ، يمكنك إما:
  • Excel 2007 أو إصدار سابق: Insert> Names> Define.
  • بدءًا من Excel 2010: صيغ الشريط> حدد اسمًا.

رمز combobox

نريد حدوث ما يلي:
  • عند تحميل UserForm ، سيتم تعبئة ComboBox1.
  • سيتم تعبئة مربعات التحرير والسرد الأخرى بناءً على قيم أول واحد.

ملء القائمة الأولى

لتعبئة مربع تحرير وسرد بمحتويات نطاق مسمى من المصنف ، يكون بناء الجملة هو:
  • ComboBox1.List = Application.Transpose (Range ("monNom"))

لمسح مربع التحرير والسرد:

  • Combobox1.Clear

ما يعطينا رمز لملء القائمة المنسدلة الأولى في تحميل UserForm:

 Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub 

ملء القائمة الثانية

عند تحديد قيمة في القائمة المنسدلة الأولى ، فسوف يتوافق (النص الموضح في مربع التحرير والسرد) مع اسم المصنف.

لعرض محتويات خلايا النطاق المسمى ، سنستخدم الحدث Change:

 Private Sub ComboBox1_Change () 'Combobox département تجنب الأخطاء التي تم إنشاؤها عند حذف مستخدم لمحتوى ComboBox1 إذا ComboBox1.Value = "" ثم الخروج من Com ComBBox2.Clear ComboBox2.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) End الفرعية 

لمربع التحرير والسرد الثالث:

 كومبو بوكس ​​2_Change () الخاص كومبو كومبوكس إذا كومبو بوكس ​​2. فيال = "" ثم الخروج من كومبو بوكس ​​3. كومير كومبو بوكس ​​2003.List = Application.Transpose (Range (NomRange)) End Sub 

البق المشتركة

نطاق غير مسمى

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

الدور هو تنفيذ جميع أسماء المصنف:

 الدالة NomDefini (Nom As String) كأحرف معتمة منطقية باسم NomDefini = False لكل Noms في ThisWorkbook.Names If Noms.Name = Nom = NomDefini = True: Exit Function Next Noms End Function 

خطأ في إدخال البيانات

كما ستلاحظ في نموذج الملف ، لا يأخذ تحديد الأسماء في الاعتبار الأحرف الخاصة أو المسافات. في بعض الحالات ، قد تحتاج إلى تحرير المتغير:

إليك مثال:

 دالة CaracSpec (Nom As String) باسم سلسلة CaracSpec = استبدال (Nom، ""، "_") CaracSpec = استبدال (CaracSpec، "-"، "_") وظيفة النهاية 

الرمز المكتمل

 الخيار Explicit Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Private Sub ComboBox1_Change () 'Combobox département If ComboBox1.Value = "" ثم إنهاء Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox1.Value) If NomDefini (NomRange) ثم ComboBox2.List = Application.Transpose (Range (NomRange)) Else ComboBox2.AddItem "" End If End Sub Private Sub ComboBox2_Change () 'Combobox communes If ComboBox2.Value = "" ثم إنهاء Sub ComboBox3.Clear Dim NomRange باسم String NomRange = CaracSpec (ComboBox2.Value) إذا NomDefini (NomRange) ثم ComboBox3.Lpose = التطبيق (Range (NomRange)) Elbo ComboBox3.AddItem "" "Aucune rue" "" End If End Sub Function NomDefini (Nom As String) باسم Dim Boolean Dim Noms As Name NomDefini = False For Noms In ThisWorkbook.Names If Nom Then NomDefini = صواب: إنهاء الدالة التالي Noms End Function Function Carac Spec (Nom As String) باسم String CaracSpec = استبدال (Nom، ""، "_") CaracSpec = استبدال (CaracSpec، "-"، "_") وظيفة النهاية 

رابط التحميل

قم بتنزيل نموذج الورقة على هذا الرابط: //cjoint.com/؟DHhootCLYVh
المقال السابق المقالة القادمة

نصائح الأعلى