آموزش فیلتر داده ها بر مبنای چند محدودیت اختیاری و نمایش در لیست باکس

Collapse
This is a sticky topic.
X
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • ~M*E*H*D*I~

    • 2011/10/19
    • 4374

    آموزش فیلتر داده ها بر مبنای چند محدودیت اختیاری و نمایش در لیست باکس

    درود

    در این تاپیک هدف ارائه راهکاری برای جستجوی چندگانه است و قصد توضیح دادن کد هارو ندارم ، برای اجرا شدن کد ها ابتدا از مسیر VBA/Tools/Refrences گزینه Microsoft Activex Data objects رو فعال کنید



    فرض کنید جدولی با داده هایی به شکل زیر دارید






    هدف فیلتر کردن داده ها به صورت گام به گام و همراه با چندین شرط متفاوت و در نهایت رسیدن به رکورد مورد نیاز و نمایش آن در لیست باکس یک فرم است
    گام اول:
    ابتدا فرم مورد نیاز خود را طراحی کنید و آیتم های مورد نیاز خود را در قالب یک تکست باکس یا کمبو باکس ایجاد نمایید





    از مسیری که در تصویر زیر مشخص شده است نسبت به نام گذاری تکست باکس ها (یا کمبو باکس ها) به روش زیر اقدام نمایید





    هر تکست باکس می بایست نام ستون متناظر خود در شیت اکسل را به اضافه حروف flt در پایان آن داشته باشد به عنوان مثال ستون نام در شیت به fname نامگذاری شده است پس تکست باکس آن را با fnameflt نام گذاری کنید.

    گام سوم:
    کانکشن مورد نیاز به شیت حاوی داده ها ایجاد کنید ، با توجه به اینکه این کانکشن در طول اجرای سابروتین ها مورد نیاز است متغیر های مربوطه را به صورت public تعریف میکنیم:



    کد PHP:
    Public cnn As ADODB.Connection
    Public rsReserve As ADODB.Recordset
    Public Sub constr()
    Dim strSQL As String
    Dim fpath 
    As String
    Dim str 
    As String
    Set cnn 
    = New ADODB.Connection
    Set rs 
    = New ADODB.Recordset
    Set rsReserve 
    = New ADODB.Recordset
    fpath 
    ThisWorkbook.Path Application.PathSeparator ThisWorkbook.Name
    str 
    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" _
                            
    fpath """;Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    strSQL "select*from [sheet1$]"
    cnn.Open str
    rsReserve
    .Open strSQLcnnadOpenForwardOnlyadLockReadOnlyadCmdText
    End Sub 
    کد زیر شیت حاوی اطلاعات را انتخاب میکند
    کد PHP:

    strSQL 
    "select*from [sheet1$]" 

    گام سوم:
    با استفاده از رویداد click کامند باتن تعبیه شده بر روی یوزر فرم کدهای زیر را وارد کنید:


    کد PHP:
    Private Sub CommandButton1_Click()
    Dim cCont As Control
    Dim fildname 
    As String
    Dim filtername 
    As String
    Dim srtfill 
    As String
    Call constr
        
    For Each cCont In Me.Controls
    If UCase(Right(cCont.Name3)) = "FLT" Then
    fildname 
    Mid(cCont.Name1Len(cCont.Name) - 3)
    filtername cCont.Value
    If filtername <> "" Then
    srtfill 
    srtfill flt(fildnamefiltername)

    End If
    End If

        
    Next cCont
       srtfill 
    Mid(srtfill1Len(srtfill) - 5)
        
    Call subfilter(srtfill)
           
    Call filllistbox

    Set rsReserve 
    Nothing
    Set rs 
    Nothing
    cnn
    .Close
    End Sub 

    این رویه در ابتدا اقدام به برقراری کانکشن نموده و با تشخیص مقادیری که شما وارد کرده اید سابروتین زیر را که اقدام به ساخت استرینگ مورد نیاز برای فیلتر کردن داده می نماید فراخوانی می کند.

    کد PHP:


    Public Function flt(fildname As Stringfiltername As String)
    flt " " fildname "  =    '" filtername "' AND "
    End Function 
    گام چهارم:

    بعد از ساخت استرینگ مورد نیاز قطعه کد زیر فراخوانی شده و داده ها فیلتر می شوند.

    کد PHP:

    Sub subfilter
    (srtfill As String)
    rsReserve.Filter srtfill
    End Sub 
    گام پنجم:

    در پایان با فراخوانی سابروتین زیر داده ها در لیست باکس وارد می شود

    کد PHP:
    Private Sub filllistbox()

        
    Dim I As IntegerAs Integer

        With ListBox1
       
            
    .BoundColumn 1
            
    .ColumnCount rsReserve.Fields.Count
            
    .ColumnHeads False
            
    .ColumnWidths ""
            
    .ControlSource ""
            
    .RowSource ""
            
    .Clear
            I 
    0
         
            
    If Not rsReserve.BOF Then rsReserve.MoveFirst
            
    If rsReserve.EOF True Then
            MsgBox 
    "this record nor exist"
            
    End If
            Do 
    Until rsReserve.EOF
                I 
    1
                
    .AddItem
                
    For 1 To .ColumnCount
                    
    .List(11) = rsReserve.Fields(1).Value
                Next J
               rsReserve
    .MoveNext
            Loop
        End With


    End Sub 
    دقت کنید در گزاره with نام لیست باکس را صحیح وارد کنید.
    فایل های پیوست شده
    Last edited by ~M*E*H*D*I~; 2018/02/18, 18:28.

    sigpic
  • hamedpersian
    • 2014/05/02
    • 2

    #2
    سلام
    ممنون. اما چرا از جدا.ل محوری (pivottable) استفاده نکنیم؟
    با اونم خیلی راحت میشه همین کار رو انجام داد. نظرتون چیه؟

    کامنت

    • ~M*E*H*D*I~

      • 2011/10/19
      • 4374

      #3
      نوشته اصلی توسط hamedpersian
      سلام
      ممنون. اما چرا از جدا.ل محوری (pivottable) استفاده نکنیم؟
      با اونم خیلی راحت میشه همین کار رو انجام داد. نظرتون چیه؟
      راه که زیاده
      پیشنهاد میکنم برای این موردی که مطرح کردید یک آموزش تهیه کنید که همه بهره ببریم
      Last edited by ~M*E*H*D*I~; 2014/06/04, 21:58.

      sigpic

      کامنت

      • 4017

        • 2010/10/03
        • 114

        #4
        با سلام
        يه سوال
        چطوري ليست باكس اين فرم از راست به چپ شده؟(البته معذرت ميخوام كه از اينهمه ماكروهاي قابل تحسين نظرم به اين مورد جلب شده)
        اگر تنهاترين تنهايان شوم بازهم خدا هست،
        او جانشين تمام نداشته هاي من است...!

        کامنت

        • ~M*E*H*D*I~

          • 2011/10/19
          • 4374

          #5
          البته اگر منظور شمارو درست متوجه شده باشم
          تصویر پیوست رو مشاهده کنید

          Click image for larger version

Name:	2014-07-21 12-28-49 ب-ظ.jpg
Views:	1
Size:	49.6 کیلو بایت
ID:	123344

          sigpic

          کامنت

          • 4017

            • 2010/10/03
            • 114

            #6
            با تشكر از پاسخ شما
            منظور من ستون هاي اين ليست باكسه كه از راست رديف/نام و ... داره
            درحالي كه معمولا توي ليست باكس رديف يا هر ستون اولي كه ميخوايم نمايش بديم از چپ شروع ميشه
            اگر تنهاترين تنهايان شوم بازهم خدا هست،
            او جانشين تمام نداشته هاي من است...!

            کامنت

            • 4017

              • 2010/10/03
              • 114

              #7
              نوشته اصلی توسط 4017
              با تشكر از پاسخ شما
              منظور من ستون هاي اين ليست باكسه كه از راست رديف/نام و ... داره
              درحالي كه معمولا توي ليست باكس رديف يا هر ستون اولي كه ميخوايم نمايش بديم از چپ شروع ميشه
              دوستان اساتيد كسي نظري نداره؟
              اگر تنهاترين تنهايان شوم بازهم خدا هست،
              او جانشين تمام نداشته هاي من است...!

              کامنت

              • khakzad

                • 2010/03/17
                • 2034

                #8
                سلام
                جناب وطن پرست پاسخ شما رو دادن!!1
                اون تنظیم رو انجام میدید
                اما موقع تخصیص داده ها به لیست باکس به این دقت کنید که الولین مورد رو میاره از سمت چپ، پس باید اخرین مورد رو در ستون اول قرار بدید و همینطور به ترتیب
                یعنی از اخر بیاید اول

                کامنت

                • 4017

                  • 2010/10/03
                  • 114

                  #9
                  نوشته اصلی توسط khakzad
                  سلام
                  جناب وطن پرست پاسخ شما رو دادن!!1
                  اون تنظیم رو انجام میدید
                  اما موقع تخصیص داده ها به لیست باکس به این دقت کنید که الولین مورد رو میاره از سمت چپ، پس باید اخرین مورد رو در ستون اول قرار بدید و همینطور به ترتیب
                  یعنی از اخر بیاید اول
                  پاسخ شما متين
                  اما من توي همين فايلي كه اينجا پيوست شده ديدم كه ستونها از راست به چپ چيده شدن و ليست باكس هم همينو نشون داده. بازم ممنون
                  اگر تنهاترين تنهايان شوم بازهم خدا هست،
                  او جانشين تمام نداشته هاي من است...!

                  کامنت

                  • ~M*E*H*D*I~

                    • 2011/10/19
                    • 4374

                    #10
                    نوشته اصلی توسط 4017
                    پاسخ شما متين
                    اما من توي همين فايلي كه اينجا پيوست شده ديدم كه ستونها از راست به چپ چيده شدن و ليست باكس هم همينو نشون داده. بازم ممنون
                    تو فایل پیوست جدول اطلاعات به عنوان سورس لیست باکس داده شده روش شما هم به همین صورته یا خیر؟

                    sigpic

                    کامنت

                    • 4017

                      • 2010/10/03
                      • 114

                      #11
                      نوشته اصلی توسط ~M*E*H*D*I~
                      تو فایل پیوست جدول اطلاعات به عنوان سورس لیست باکس داده شده روش شما هم به همین صورته یا خیر؟
                      راستش من تو بر اين فايل رفتم اما سر در نياوردم كه سورس اين جدول از كجا داده شده. من از طريق rowsurce آدرس دهي ميكنم
                      اگر تنهاترين تنهايان شوم بازهم خدا هست،
                      او جانشين تمام نداشته هاي من است...!

                      کامنت

                      • ~M*E*H*D*I~

                        • 2011/10/19
                        • 4374

                        #12
                        نوشته اصلی توسط 4017
                        راستش من تو بر اين فايل رفتم اما سر در نياوردم كه سورس اين جدول از كجا داده شده. من از طريق rowsurce آدرس دهي ميكنم
                        فایلت رو بذار تا بررسی بشه چون همون جواب اولی که دادم راهکار سوال بود اما شاید ایراد از جای دیگه باشه

                        sigpic

                        کامنت

                        • 4017

                          • 2010/10/03
                          • 114

                          #13
                          نوشته اصلی توسط ~M*E*H*D*I~
                          فایلت رو بذار تا بررسی بشه چون همون جواب اولی که دادم راهکار سوال بود اما شاید ایراد از جای دیگه باشه
                          درسته با اون جواب ميشه انجامش داد. اما اين حس كنجكاوي من گل كرده و خواستم بدونم اينجا چه كاري كرده كه ليست باكسش از راست چيده شده
                          فایل های پیوست شده
                          اگر تنهاترين تنهايان شوم بازهم خدا هست،
                          او جانشين تمام نداشته هاي من است...!

                          کامنت

                          • ~M*E*H*D*I~

                            • 2011/10/19
                            • 4374

                            #14
                            فایل و تصویر پیوست رو ببین

                            Click image for larger version

Name:	2014-07-23 12-07-16 ب-ظ.jpg
Views:	1
Size:	43.8 کیلو بایت
ID:	123367
                            فایل های پیوست شده

                            sigpic

                            کامنت

                            • 4017

                              • 2010/10/03
                              • 114

                              #15
                              ممنون
                              جدول من به شكل tabel تغيير كرده اما تو فرم بازم همونه. ستونها از چپ چيده شده
                              اگر تنهاترين تنهايان شوم بازهم خدا هست،
                              او جانشين تمام نداشته هاي من است...!

                              کامنت

                              Working...