PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : چگونه مي توان header ليست باکس را مقدار دهي کرد؟



Ali Parsaei
2015/12/17, 09:44
سلام،
من با فعال سازي خصوصيت columheads در يک ليست باکس هدر آن را فعال کرده ام ولي بلد نيستم اين هدر را مقدار دهي کنم! کسي مي تونه راهنماييم کنه؟

iranweld
2015/12/17, 10:44
با سلام

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


9777


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

Ali Parsaei
2015/12/17, 23:45
متشکرم،
بدون استفاده از rowsource چطور مي شود؟ کسي مي تواند بدون rowsource راهنمايي کند؟
چون من اطلاعاتم را از سه ديتاي مختلف در سه شيت متفاوت در ليست بکس بارگيري مي کنم.

iranweld
2015/12/18, 12:03
یک روش دیگر بدون استفاده از ColumnHeads استفاده از از LABEL در برای هر آیتم در بالای لیست باکس میباشد

9792

abootorab
2015/12/18, 18:49
متشکرم،
بدون استفاده از rowsource چطور مي شود؟ کسي مي تواند بدون rowsource راهنمايي کند؟
چون من اطلاعاتم را از سه ديتاي مختلف در سه شيت متفاوت در ليست بکس بارگيري مي کنم.

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

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

امين اسماعيلي
2015/12/19, 05:19
با درود
خب یه چیزیم من بگم هر چند دیگه پیر شدم اما اگر همون سر ستون ها که هدرت باشه رو هم توی لیست باکست بیاری ( یعنی همیشه اول اونها بیان) اینجوری ردیف اولت میشه هدر . بعدش فرضا میخوای با لیست باکست یه کاریایی بکنی میتونی از ردیف دمش به بعد استفاده کنی. اینجوری تو پرینت هم سر ستون ها(هدر ها) رو هم داری.

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

majid_mx4
2015/12/19, 17:24
با سلام به تمامی دوستان

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

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

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


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



با تشکر میر

Ali Parsaei
2015/12/19, 23:07
متشکرم از همه دوستان،
البته من هم اول سرستونهايم را از يکي از شيتهاي اطلاعات در ليست باکس add کردم و بعد بقيه اطلاعات را از شيتهاي مختلف بارگيري کردم (چون سر ستونها در کل شيتها يکي است)، منتهي مشکل اينجا بود که مي خواستم سر ستونها يک جوري دورش خط کشي (border) داشته باشه، بعد خصوصيت columnheads ليست باکس را فعال کردم، ولي چون با اين روش از row source استفاده نشده ديگر سر ستونها که اول بارگيري شده داخل کادر header ليست بکس قرار نمي گيرد! و هدر خالي مي ماند!
ظاهرا" ساده ترين راه همان ليبل است.
البته اگر بشود کل اطلاعاتي که بارگيري مي شود دورشان خط کشي ايجاد کرد (يعني مثل يک جدول بشود) آن هم خوب است. که نمي دانم اون هم امکان پذير هست يا نه؟!

امين اسماعيلي
2015/12/20, 07:21
با درود

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

بازم عذر میخوام

majid_mx4
2015/12/20, 13:18
با سلام

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

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

با سپاس فراوان میر