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

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

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

البحث عن الأصناف في Excel باستخدام VBA: دليل شامل لإنشاء واجهة بحث متقدمة

 

 البحث عن الأصناف في Excel باستخدام VBA: دليل شامل لإنشاء واجهة بحث متقدمة

 


في عالم إدارة البيانات والمخازن، تبرز الحاجة إلى أدوات فعالة للبحث السريع عن الأصناف. يقدم هذا المقال دليلاً شاملاً لإنشاء نظام بحث متكامل في Excel باستخدام VBA، حيث يمكن للمستخدمين إدخال اسم الصنف في صندوق نصي (TextBox) ورؤية جميع النتائج المطابقة معروضة في قائمة (ListBox) بشكل منظم.

 

 لماذا نستخدم هذا النظام؟

1. توفير الوقت: البحث الفوري عبر آلاف الأصناف في ثوانٍ

2. الدقة: تقليل الأخطاء البشرية في البحث اليدوي

3. المرونة: البحث بأجزاء من الاسم (مثل "20*30") دون الحاجة للمطابقة التامة

4. التكامل: العمل مباشرة مع قاعدة البيانات الموجودة في Excel

 

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

( Microsoft Excel (2010 أو أحدث

 تمكين وحدات الماكرو (Macros)

 معرفة أساسية بواجهة VBA (ستقدم الخطوات التفصيلية)

 الخطوة 1: إنشاء واجهة المستخدم (UserForm)

1. افتح محرر VBA بالضغط على `Alt+F11`

2. من القائمة اختر `Insert` > `UserForm`

3. سمِّ الفورم باسم مناسب مثل `frmSearchProducts`

 

 إضافة عناصر التحكم:

1. TextBox (لإدخال نص البحث):

    Name: `txtSearch`

    PlaceholderText: "اكتب اسم الصنف هنا..."

2. ListBox (لعرض النتائج):

    Name: `lstResults`

    ColumnCount: 6 (أو حسب عدد أعمدة بياناتك)

 

3. CommandButton (زر البحث):

    Name: `btnSearch`

    Caption: "بحث"

 الخطوة 2: كتابة كود VBA

 الكود الكامل للفورم:

()Private Sub UserForm_Initialize

    ' تهيئة الفورم عند التحميل

    Me.Caption = "نظام البحث عن الأصناف"

    txtSearch.SetFocus   

    ' تهيئة ListBox

    With lstResults

        .ColumnCount = 6

        .ColumnHeads = True

        .ColumnWidths = "50;150;80;60;80;80" ' اضبط حسب احتياجاتك

    End With

   

    ' تعيين حدث عند الضغط على Enter في TextBox

    txtSearch.OnKeyPress = "[Event Procedure]"

End Sub

 

()Private Sub btnSearch_Click

    Call PerformSearch

End Sub

 

Private Sub txtSearch_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    ' البحث عند الضغط على Enter

    If KeyAscii = 13 Then

        Call PerformSearch

    End If

End Sub

 

()Private Sub PerformSearch

    Dim ws As Worksheet

    Dim searchTerm As String

    Dim lastRow As Long, i As Long, j As Long

    Dim resultCollection As Collection

    Dim startTime As Double   

    ' بدء حساب وقت التنفيذ

    startTime = Timer   

    ' تعيين ورقة البيانات (غير الاسم حسب حاجتك)

    Set ws = ThisWorkbook.Sheets("بيانات الأصناف")   

    ' الحصول على نص البحث

    searchTerm = Trim(txtSearch.Text)

   

    ' التحقق من إدخال نص البحث

    If searchTerm = "" Then

        MsgBox "الرجاء إدخال اسم الصنف للبحث", vbExclamation, "بيانات ناقصة"

        Exit Sub

    End If   

    ' إعداد Collection لتخزين النتائج

    Set resultCollection = New Collection

   

    ' العثور على آخر صف في العمود A

    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

   

    ' مسح ListBox الحالي

    lstResults.Clear   

    ' إضافة عناوين الأعمدة

    With ws

        Dim headers As Variant

        headers = Array(.Cells(1, 1).Value, .Cells(1, 2).Value, .Cells(1, 3).Value, _

                      .Cells(1, 4).Value, .Cells(1, 5).Value, .Cells(1, 6).Value)

        lstResults.Column = headers

    End With   

    ' البحث في البيانات

    For i = 2 To lastRow

        If InStr(1, ws.Cells(i, 2).Value, searchTerm, vbTextCompare) > 0 Then

            Dim itemData(1 To 6) As Variant

            For j = 1 To 6

                itemData(j) = ws.Cells(i, j).Value

            Next j

            resultCollection.Add itemData

        End If

    Next i

   

    ' عرض النتائج

    If resultCollection.Count > 0 Then

        Dim finalArray() As Variant

        ReDim finalArray(1 To resultCollection.Count, 1 To 6)

       

        For i = 1 To resultCollection.Count

            For j = 1 To 6

                finalArray(i, j) = resultCollection(i)(j)

            Next j

        Next i

       

        lstResults.List = finalArray

    Else

        MsgBox "لم يتم العثور على أصناف تطابق: " & searchTerm, vbInformation, "لا توجد نتائج"

    End If   

    ' عرض وقت التنفيذ

    Me.Caption = "نظام البحث عن الأصناف - تم العثور على " & resultCollection.Count & _

                " نتيجة في " & Format(Timer - startTime, "0.00") & " ثانية"

End Sub

 

 

 الخطوة 4: تشغيل النظام

 

أضف هذا الكود في وحدة عادية (Module) لتشغيل الفورم:

 

()Sub OpenSearchForm

    frmSearchProducts.Show

End Sub

حل المشكلات الشائعة

 

1. خطأ "لا توجد بيانات مطابقة":

    تأكد من تطابق أسماء الأعمدة في الكود مع ورقة العمل

    تحقق من وجود البيانات في الخلايا المستهدفة

 

2. أداء بطيء:

    قلل عدد الأعمدة المعروضة في ListBox

    استخدم `Application.ScreenUpdating = False` أثناء التنفيذ

 

3. خطأ في عرض النتائج:

    تأكد من تطابق `ColumnCount` مع عدد الأعمدة الفعلي

    تحقق من أن `ColumnWidths` مناسبة لعرض البيانات

وفى النهاية

يوفر هذا النظام حلًا متكاملاً للبحث عن الأصناف في Excel، مع ميزات متقدمة مثل:

 البحث بأجزاء من الاسم

 عرض منظم للنتائج

 وقت تنفيذ سريع

 واجهة مستخدم سهلة

يمكنك تطوير النظام further بإضافة:

 تصفية النتائج حسب المقاس أو السعر

 إمكانية تصدير النتائج إلى PDF أو Excel

 ربط النظام بقاعدة بيانات خارجية

 

بهذا تكون قد أنشأت نظام بحث متكاملًا يلبي احتياجات إدارة المخازن والبيانات بشكل فعال.

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

  •  Excel VBA 
  •  نظام البحث عن الأصناف 
  •  TextBox مع ListBox 
  •  واجهة مستخدم VBA 
  •  UserForm في Excel 
  •  ReDim Preserve 
  •  Collection في VBA 
  •  InStr للبحث النصي 
  •  Event Procedures 
  •  تنفيذ الأوامر بالEnter 
  •  بحث متقدم في Excel 
  •  تصفية البيانات 
  •  إدارة المخازن 
  •  قوائم منتجات 
  •  ربط TextBox مع ListBox 
  •  كيفية إنشاء نظام بحث في Excel 
  •  دليل شامل لVBA للمبتدئين 
  •  حل مشكلة البحث عن الأصناف 
  •  أفضل طرق عرض البيانات في VBA 
  •  نظام إدارة مخازن بإكسل 
  •  إصلاح خطأ ReDim Preserve 
  •  تحسين أداء ListBox 
  •  البحث غير الحساس لحروف كبيرة/صغيرة 
  •  عرض نتائج متعددة الأعمدة 
  •  تحديث البيانات تلقائياً 
  •  إضافة أزرار متقدمة 
  •  البحث أثناء الكتابة 
  •  النقر المزدوك للتفاصيل 
  •  تصدير النتائج لPDF 
  •  ربط مع قواعد بيانات 

 

 


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