اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر (معدل)

السلام عليكم ورحمة الله وبركاتة

رجاء مساعدتى جزاك الله خيرا

يوجد خيارين بحث وكلاهما لايعمل بسبب انه لايتم عرض 12 عمود فى الليست بوكس ولاكن يتم عرض 10 اعمده فقط

ListBox1.ColumnCount = 12.xlsm

تم تعديل بواسطه mahmoud nasr alhasany
  • mahmoud nasr alhasany changed the title to ( لا يتم عرض 12 اعمدة )ListBox1.ColumnCount = 12
قام بنشر

وعليكم السلام ورحمة الله تعالى وبركاته 

قبل الخوض في مسألة عرض الأعمدة أظن أنك بحاجة لمراجعة الشروط على الأكواد التالية 

For i = 2 To lastRow
    If (LCase(ws.Cells(i, 3).value) = LCase(searchValue1) Or searchValue1 = "ALL") And _
       (LCase(ws.Cells(i, 4).value) = LCase(searchValue2) Or searchValue2 = "ALL") And _
       ws.Cells(i, 3).value Like "*" & searchValue1 & "*" And _
       (Not includeDates Or (ws.Cells(i, 2) >= DateMin And ws.Cells(i, 2) <= DateMax)) Then

 '=================================================     '

For i = 2 To lastRow
        If Trim(ws.Cells(i, "b").value) = ComboBox5.value Then
            ComboBox4.value = ws.Cells(i, "a").value
            Exit For
        End If
    Next i

أعتقد ان عناصر combobo4 و combobox 5   يتم تعبئتها بشكل خاطئ  يرجى التأكد منها أولا أو تحديد الأعمدة  المطلوبة دون الحاجة لإرفاق اي أكواد 

قام بنشر (معدل)

اهلا وسهلا استاذنا /  محمد هشام

تقصد

For i = 2 To lastRow
        If Trim(ws.Cells(i, "d").value) = ComboBox5.value Then
            ComboBox4.value = ws.Cells(i, "c").value
            Exit For
        End If
    Next i

شكرا على الملاحظة ولاكن توجد مشكلة عرض الاعمدة وفقا لتاريخ والشروط لايتم لانها تعرض 10 اعمدة بدل من 12 لو وضعنا خاصية On Error Resume Next

تم تعديل بواسطه mahmoud nasr alhasany
قام بنشر

نعم مثلا كومبوبوكس 4 ,و5  يتم تعبئتها من الأعمدة 1,و2 وانت واضع شرط التحقق من قيم العمود D هل هو خطأ ؟ 

اظافة ان الطريقة المستخدمة في الملف لن تمكنك من عرض أكثر من 10 أعمدة 

 لو وضحت ما تحاول فعله ممكن نعرض البيانات عادي على الليست بوكس وفلترتها بين تاريخين والشروط المطلوبة اذا حددت أعمدتها 

قام بنشر (معدل)

هذا الملف بعد تعديله نأسف على الخطاء وهذا الكود لايقوم بعرض 12 عمود ولاكنه يعرض 10 فقط

Private Sub CommandButton7_Click()
 Dim ws As Worksheet
    Dim lastRow As Long
    Dim searchValue1 As String
    Dim searchValue2 As String
    Dim currentRow As Long
    Dim DateMin As Date
    Dim DateMax As Date
    Dim includeDates As Boolean
    ' تحديد ورقة العمل
    Set ws = Worksheets("Sheet2")
    ' الحصول على القيم من عناصر التحكم
    searchValue1 = ComboBox4.value
    searchValue2 = ComboBox5.value
    If IsDate(TextBox9.value) Then DateMin = CDate(TextBox9.value)
    If IsDate(TextBox10.value) Then DateMax = CDate(TextBox10.value)
    includeDates = CheckBox1.value ' تحديد قيمة مربع الاختيار
 Dim userEndDate As Date
 ' التحقق من صحة التاريخ المدخل في TextBox2
    If IsDate(TextBox10.value) Then
        userEndDate = CDate(TextBox10.value)
        If userEndDate > Date Then
            MsgBox "تاريخ النهاية لا يمكن أن يكون أكبر من تاريخ اليوم."
            Exit Sub
        End If
    End If

   ' تحديد الصف الأخير
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' مسح قائمة النتائج وتحديد عرض الأعمدة
    With ListBox1
        .Clear
        .ColumnCount = 12
        .ColumnWidths = "35;50;45;50;65;40;35;40;45;40;45;40"
        .Font.Size = 6
    End With

currentRow = 0
For i = 2 To lastRow
    If (LCase(ws.Cells(i, 3).value) = LCase(searchValue1) Or searchValue1 = "ALL") And _
       (LCase(ws.Cells(i, 4).value) = LCase(searchValue2) Or searchValue2 = "ALL") And _
       ws.Cells(i, 3).value Like "*" & searchValue1 & "*" And _
       (Not includeDates Or (ws.Cells(i, 2) >= DateMin And ws.Cells(i, 2) <= DateMax)) Then


            ' إضافة البيانات إلى القائمة
            ListBox1.AddItem
            ListBox1.List(currentRow, 0) = ws.Cells(i, 1).value
            ListBox1.List(currentRow, 1) = Format(ws.Cells(i, 2).value, "dd/mm/yyyy")
            ListBox1.List(currentRow, 2) = ws.Cells(i, 3).value '
            ListBox1.List(currentRow, 3) = ws.Cells(i, 4).value '
            ListBox1.List(currentRow, 4) = ws.Cells(i, 5).value '
            ListBox1.List(currentRow, 5) = ws.Cells(i, 6).value '
            ListBox1.List(currentRow, 6) = ws.Cells(i, 7).value
            ListBox1.List(currentRow, 7) = ws.Cells(i, 8).value '
            ListBox1.List(currentRow, 8) = ws.Cells(i, 9).value '
            ListBox1.List(currentRow, 9) = ws.Cells(i, 10).value '
            ListBox1.List(currentRow, 10) = ws.Cells(i, 11).value '
            ListBox1.List(currentRow, 11) = ws.Cells(i, 12).value

            currentRow = currentRow + 1
        End If
    Next i


    If ListBox1.ListCount = 0 Then
        MsgBox "لم يتم العثور على نتائج"
    End If

End Sub
         
 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''        
         
            '    كود اخر بحث

Private Sub CommandButton6_Click()
On Error Resume Next
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long, j As Long
    Dim startDate As Date, endDate As Date
    ' تحديد ورقة العمل
    Set ws = ThisWorkbook.Sheets("Sheet2")
    ' تحديد النطاق الكامل للبيانات
    lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
    ' تحويل التواريخ من نص إلى تنسيق التاريخ
    startDate = CDate(TextBox9.value)
    endDate = CDate(TextBox10.value)
    ' مسح البيانات السابقة من ListBox
    ListBox1.Clear
    ' تحديد عدد الأعمدة في ListBox
    ListBox1.ColumnCount = 12
    ' ملء ListBox بالبيانات التي تطابق المعايير
    For i = 2 To lastRow
        If ws.Cells(i, "b").value >= startDate And ws.Cells(i, "b").value <= endDate And ws.Cells(i, "c").value = ComboBox4.value And _
           ws.Cells(i, "d").value = ComboBox5.value Then ' قم بتغيير أرقام الأعمدة إذا لزم الأمر
            ListBox1.AddItem
            For j = 1 To 12
            If Not IsEmpty(ws.Cells(i, j)) Then
                ListBox1.List(ListBox1.ListCount - 1, j - 1) = CStr(ws.Cells(i, j).value) ' تحويل القيمة إلى نص إذا لزم الأمر
        End If
        Next j
        End If
    Next i
End Sub

 

ListBox1.ColumnCount = 12.xlsm

صورة العمل.png

تم تعديل بواسطه mahmoud nasr alhasany
قام بنشر

جرب هدا 

Enregistrementdelcran2024-11-17123556.thumb.gif.1b1e5d7e24b17a0e6d2fdc26b7cc1de6.gif

Dim OnRng(), tbl, Irow, ColVisu(), Dates(), Choix()
Private Sub UserForm_Initialize()
  tbl = "Table2"
  OnRng = Range(tbl).value
  For i = 1 To UBound(OnRng): OnRng(i, 2) = CDate(OnRng(i, 2)): Next i
  Irow = Range(tbl).Columns.Count
  ColVisu = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
  ListBox1.ColumnCount = 12

  Set d = CreateObject("scripting.dictionary")
  d("*") = ""
  For i = LBound(OnRng) To UBound(OnRng)
    d(OnRng(i, 3)) = ""
  Next i
  Choix = d.keys
'================' رقم السيارة  ==============
Tri Choix, LBound(Choix), UBound(Choix)
Dim iTemp As Variant
For i = LBound(Choix) To (UBound(Choix) - LBound(Choix)) \ 2
    iTemp = Choix(i)
    Choix(i) = Choix(UBound(Choix) - i)
    Choix(UBound(Choix) - i) = iTemp
Next i
Me.ComboBox1.List = Choix
'================' اسم السائق ========================
  Set d = CreateObject("scripting.dictionary")
  d("*") = ""
  For i = LBound(OnRng) To UBound(OnRng)
    d(OnRng(i, 4)) = ""
  Next i
  Choix = d.keys
  Tri Choix, LBound(Choix), UBound(Choix)
  Me.ComboBox4.List = Choix
 
  Set d = CreateObject("scripting.dictionary")
  colDate = 2
  For i = LBound(OnRng) To UBound(OnRng)
    d(OnRng(i, colDate)) = ""
  Next i
  Dates = d.keys
  Tri Dates, LBound(Dates), UBound(Dates)
  Me.ComboBox2.List = Dates: Me.ComboBox2 = Dates(0)
  Me.ComboBox3.List = Dates: Me.ComboBox3 = Dates(UBound(Dates))
  Filtre
End Sub

Sub Filtre()
    Dim tbl()
    clé = Me.ComboBox1: If clé = "" Then clé = "*"
    cléLieu = Me.ComboBox4: If cléLieu = "" Then cléLieu = "*"
    début = CDate(Me.ComboBox2)
    fin = CDate(Me.ComboBox3)
    colDate = 2
    n = 0
    For i = LBound(OnRng) To UBound(OnRng)
      If OnRng(i, colDate) >= début And OnRng(i, colDate) <= fin And OnRng(i, 3) Like clé And OnRng(i, 4) Like cléLieu Then
        n = n + 1: ReDim Preserve tbl(1 To Irow, 1 To n)
        c = 0
        For Each K In ColVisu
          c = c + 1: tbl(c, n) = OnRng(i, K)
        Next K
       End If
     Next i
     If n > 0 Then
       Me.ListBox1.Column = tbl
     Else
        Me.ListBox1.Clear
        MsgBox "لم يتم العثور على بيانات مطابقة", vbInformation, "نتائج التصفية"
    End If
End Sub

 

 

ListBox1.ColumnCount = 12-V2.xlsm

  • Like 3
قام بنشر (معدل)

الف شكر استاذنا / محمد هشام على المجهود الرائع واضافة ترتيب البيانات على حسب الرغبة

الف شكر لك

هل يمكن عمل التقويم تاريخ بدل اظهارها رقميا كما يوجد فى الفورم  من textbox9,10 بدل  2,3 combobox

تم تعديل بواسطه mahmoud nasr alhasany

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information