چگونه مي توان header ليست باکس را مقدار دهي کرد؟

Collapse
X
 
  • زمان
  • Show
Clear All
new posts
  • Ali Parsaei
    مدير تالارتوابع اکسل

    • November 2013
    • 1518

    چگونه مي توان header ليست باکس را مقدار دهي کرد؟

    سلام،
    من با فعال سازي خصوصيت columheads در يک ليست باکس هدر آن را فعال کرده ام ولي بلد نيستم اين هدر را مقدار دهي کنم! کسي مي تونه راهنماييم کنه؟
    sigpic
  • iranweld

    • March 2015
    • 3342

    #2
    با سلام

    دیتای مورد نظر معمولا از سلول اول هر ستون آدرس داده شده مقداردهی میگردد


    Click image for larger version

Name:	UserForm_10.GIF
Views:	1
Size:	27.2 کیلو بایت
ID:	127871

    کد PHP:
    Private Sub UserForm_Initialize()
    'set ListBox properties on initialization of UserForm'

    With ListBox1
    .ColumnHeads True
    .ColumnCount 3
    'set the ColumnWidths property of second & third columns to zero to not display them in the ListBox'
    .ColumnWidths "40;0:0"
    .RowSource "=Sheet2!A2:C6"
    .MultiSelect fmMultiSelectSingle
    'specifies the column of data in a ListBox that supplies data for its Text property'
    .TextColumn 1
    .BoundColumn 3
    End With

    End Sub 

    Last edited by iranweld; 2015/12/17, 10:50.

    Comment

    • Ali Parsaei
      مدير تالارتوابع اکسل

      • November 2013
      • 1518

      #3
      متشکرم،
      بدون استفاده از rowsource چطور مي شود؟ کسي مي تواند بدون rowsource راهنمايي کند؟
      چون من اطلاعاتم را از سه ديتاي مختلف در سه شيت متفاوت در ليست بکس بارگيري مي کنم.
      sigpic

      Comment

      • iranweld

        • March 2015
        • 3342

        #4
        یک روش دیگر بدون استفاده از ColumnHeads استفاده از از LABEL در برای هر آیتم در بالای لیست باکس میباشد

        Click image for larger version

Name:	Untitled.png
Views:	1
Size:	59.5 کیلو بایت
ID:	127880

        Comment

        • abootorab

          • October 2014
          • 351

          #5
          نوشته اصلی توسط علي پارسا
          متشکرم،
          بدون استفاده از rowsource چطور مي شود؟ کسي مي تواند بدون rowsource راهنمايي کند؟
          چون من اطلاعاتم را از سه ديتاي مختلف در سه شيت متفاوت در ليست بکس بارگيري مي کنم.
          با درود
          جناب پارسای عزیز، باید عرض کنم که متاسفانه لیست باکس در vba قوی و با قابلیتهای زیاد عمل نمیکند! نمایش header در لیست باکس تقریبا نمایشی هست و کارایی خاصی به جز نمایش عنوان ستون ها ندارند و فقط در صورت استفاده از RowSource امکان پذیر هست و وارد کردن اطلاعات درون لیست باکس به سایر روش ها سبب عدم نمایش Header ها میشوند (در واقع Header نمایش داده میشود اما بدون متن). طبق فرمایش شما که اطلاعات از سه شیت متفاوت دریافت و در لیست باکس بارگذاری میکنید به نظر بنده مناسبترین روشی که وجود داره یا طبق فرمایش جناب iranweld استفاده از Label میباشد و یا اینکه شما در یک شیت مجزا یک محدوده کاملا پویا تعریف کنید و ابتدا دیتاها رو به این شیت منتقل کنید و سپس محدوده پویا رو از طریق RowSource درون لیست باکس بارگذاری کنید در این حالت اولین سطر قبل از محدوده پویا به عنوان Header در لیست باکستون نمایش داده میشه. بنده خودم زیاد از این روش استفاده میکنم.

          امیدوارم خوب توضیح داده باشم و متوجه منظورم شده باشین.
          موفق باشین.

          Comment

          • امين اسماعيلي
            مدير تالار ويژوال بيسيك

            • January 2013
            • 1198

            #6
            با درود
            خب یه چیزیم من بگم هر چند دیگه پیر شدم اما اگر همون سر ستون ها که هدرت باشه رو هم توی لیست باکست بیاری ( یعنی همیشه اول اونها بیان) اینجوری ردیف اولت میشه هدر . بعدش فرضا میخوای با لیست باکست یه کاریایی بکنی میتونی از ردیف دمش به بعد استفاده کنی. اینجوری تو پرینت هم سر ستون ها(هدر ها) رو هم داری.

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

            Comment

            • majid_mx4

              • June 2012
              • 698

              #7
              با سلام به تمامی دوستان

              ضمن اجازه از جناب آقای اسماعیلی عزیز و پوزش به خاطر جسارت و دستگاری در کد ایشان .(اصل کد متعلق به ایشان است )

              فکر میکنم پایه کار درست است ولی کد مقدار تغییرات نیاز دارد.

              اگر یک تکست باکس به فرم اضافه شود و مقدار درخواستی را به آن ارجاع دهیم خواهید دید که جوابها چندان درست نست ( یا بدون هدر است و یا یکی از مجموع کم است ) شاید هم در سیستم بدنه اینجور است . به هرحال کد زیر اصلاح شده کد دوست بزرگوارم جناب اسماعیلی است امید که مفید واقع شود .( باز هم معذرت خواهی از ایشان )
              توضیح : به فرم یک تکست باکس اضافه کرده تا بتوانیم نام های موردنظر را در آن تایپ نمایید

              کد:
              Private Sub CommandButton1_Click()
              ListBox1.Clear
              'define 4 column listbox
              ListBox1.ColumnCount = 4
              'change column widhts
              ListBox1.ColumnWidths = "50;50;50"
                With ListBox1
                .AddItem
                
                 ListBox1.List(0, 0) = Sheet2.Range("A1").Value 'header
                  ListBox1.List(0, 1) = Sheet2.Range("B1").Value 'header
                  ListBox1.List(0, 2) = Sheet2.Range("C1").Value 'header
                  ListBox1.List(0, 3) = Sheet2.Range("D1").Value 'header
              End With
              'assing values to the columns
              Dim c As Range
              Dim i As Integer
              i = 2
              For Each c In Sheet2.Range("A2:A20")
              If c.Value = TextBox1.Text Then
                       ListBox1.AddItem
                  ListBox1.List(i - 1, 0) = c 'data
                  ListBox1.List(i - 1, 1) = c.Offset(0, 1) 'data
                  ListBox1.List(i - 1, 2) = c.Offset(0, 2) 'data
                  ListBox1.List(i - 1, 3) = c.Offset(0, 3) 'data
                  i = i + 1
                  End If
              Next c
              End Sub
              با تشکر میر
              Last edited by majid_mx4; 2015/12/20, 12:26.

              Comment

              • Ali Parsaei
                مدير تالارتوابع اکسل

                • November 2013
                • 1518

                #8
                متشکرم از همه دوستان،
                البته من هم اول سرستونهايم را از يکي از شيتهاي اطلاعات در ليست باکس add کردم و بعد بقيه اطلاعات را از شيتهاي مختلف بارگيري کردم (چون سر ستونها در کل شيتها يکي است)، منتهي مشکل اينجا بود که مي خواستم سر ستونها يک جوري دورش خط کشي (border) داشته باشه، بعد خصوصيت columnheads ليست باکس را فعال کردم، ولي چون با اين روش از row source استفاده نشده ديگر سر ستونها که اول بارگيري شده داخل کادر header ليست بکس قرار نمي گيرد! و هدر خالي مي ماند!
                ظاهرا" ساده ترين راه همان ليبل است.
                البته اگر بشود کل اطلاعاتي که بارگيري مي شود دورشان خط کشي ايجاد کرد (يعني مثل يک جدول بشود) آن هم خوب است. که نمي دانم اون هم امکان پذير هست يا نه؟!
                sigpic

                Comment

                • امين اسماعيلي
                  مدير تالار ويژوال بيسيك

                  • January 2013
                  • 1198

                  #9
                  با درود

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

                  بازم عذر میخوام
                  در پناه خداوندگار ایران زمین باشید و پیروز

                  Comment

                  • majid_mx4

                    • June 2012
                    • 698

                    #10
                    با سلام

                    جناب اسماعیلی عزیز

                    این فرمایشات را نفرمایید از شما بابت اشعاع دانش خودتان که مطمئنن به سادگی بدست نیاورده و بی دریغ در اختیار اعضای انجمن گذاشته اید بی شک باید سپاسگذار بود.

                    با سپاس فراوان میر
                    Last edited by majid_mx4; 2015/12/20, 13:25.

                    Comment

                    Working...