PDA

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



esyoo
2010/08/06, 14:34
سلام
دوستان می خواستم بدونم معادل vlookup در vba چی هست؟
در واقع می خوام اگر کد پرسنلی رو وارد کردم نام و نام خانوادگی طرف درست جلوش ظاهر بشه
با توجه به عکس
با تشکر
http://aks98.com/images/1sn0ll1nog3zv69398hy.jpg

shamsololama
2010/08/07, 11:14
با درود فراوان
با روشهای مختلفی میشه این کار رو انجام داد
یک نمونه را در اینجا مثال می زنم

Private Sub TextBox1_Change()
On Error Resume Next
TextBox2.Text = ""
TextBox3.Text = ""
With Sheet1.Range("a1:a20000")
Set c = .Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlPart)

End With
If c.Text = TextBox1.Text Then
TextBox2.Text = c.Offset(0, 1).Text
TextBox3.Text = c.Offset(0, 2).Text
End If
End Sub


کد با توضیح هر خط از کد



Private Sub TextBox1_Change()
On Error Resume Next
TextBox2.Text = "" 'تکس باکس راخالي ميکند
TextBox3.Text = "" ' تکس باکس 3 را خالي ميکند
With Sheet1.Range("a1:a20000") 'رنج مورد نظر را مشخص ميکنيم
Set c = .Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlPart) ' متن داخل تکس باکس يک يا همان کد را جستجو ميکند

End With
If c.Text = TextBox1.Text Then 'به شرط اينکه کد مورد نظر پيدا شود
TextBox2.Text = c.Offset(0, 1).Text ' يک خانه جلوتر از خانه کد پيدا شد يعني نام را درتکست 2 وارد مي شود
TextBox3.Text = c.Offset(0, 2).Text ' يک خانه جلوتر از خانه کد پيدا شد يعني نام خانوادگي را درتکست 3 وارد مي شود
End If
End Sub

File #1: http://www.lon.ir/up/uploads/1281225920.rar

esyoo
2010/08/07, 13:36
سلام
با تشکر از شما
ممنون از اینکه وقت گذاشتید.
خواهشا اگر امکانش هست نمونه فایل هاتون رو در سایت http://www.4shared.com/ قرار بدید.اول در اون ثبت نام کنید و سپس فایل هاتون رو آپلود کنید فعلا تا 10 گیگ مجانی می تونید فایل داخلش آپلود کنید.
1)دیگه لینک ها پاک نمیشه
2)اگر سایتش فیلتر بشه به راحتی میشه از طریق سایت http://rapidbaz.com/from/9027 لینک مورد نظر رو دانلود کرد.
3)یک آرشیو کامل دارید و با ورود بهش خیلی کار ها می تونید انجام بدید.
تصاویری از پنل مدیریتی هر یوزر
http://aks98.com/images/xkv88x22q0ffh99yxxvj_thumb.jpg (http://aks98.com/viewer.php?file=xkv88x22q0ffh99yxxvj.jpg)

http://aks98.com/images/3puc6f4yhzlc4yo1o77_thumb.jpg (http://aks98.com/viewer.php?file=3puc6f4yhzlc4yo1o77.jpg)

متاسفانه من نمونه فایل شما رو نتونستم دانلود کنم اگر امکانش هست در این سایت آپلود کنید.

esyoo
2010/08/08, 10:25
آیا می توان نمودار را روی یوزر فورم نمایش داد؟

shamsololama
2010/08/08, 12:15
با درود فراوان
بله همانطور که یک تکس باکس و یا یک لیبل رو رو یوزفرم قرار می دهی یک چارت هم میتوان به فرم اضافه کرد
اگر روی تولز باکس چارت نداری با راست کلیک روی یکی از آبجکت ها به منوی additional controls رفته و آن را تیک بزنید

esyoo
2010/08/08, 12:44
با سلام و تشکر
اگر منظور شما این هست

http://aks98.com/images/gj5zd5nv4bpvlco0uqaj_thumb.jpg (http://aks98.com/viewer.php?file=gj5zd5nv4bpvlco0uqaj.jpg)


که من هر کار کردم نتونستم چیزی اضافه بکنم!

shamsololama
2010/08/08, 13:23
با درود فراوان
با کلیک بر روی additional controls مراحل زیر را باید طی کنید.

[]http://aks98.com/images/tjahmbebdw18a570lykj_thumb.jpg (http://aks98.com/viewer.php?file=tjahmbebdw18a570lykj.jpg)[/]


مرحله دوم

[i]http://aks98.com/images/hok3mj9fdn7zeaffb7xj_thumb.jpg (http://aks98.com/viewer.php?file=hok3mj9fdn7zeaffb7xj.jpg)[/]

یادت باشه جایی که با فلاش قرمز مشخص کردم نباید تیک خورده باشه تا آبجکهای تیک نخورده رو بتونی ببینی

esyoo
2010/08/08, 15:28
با سلام مجدد متاسفانه additional controls برای من کار نمی کنه و هر بار که روش کلیک میکنم هیچ اتفاق خاصی نمی افته!

اما سوال جدیدم :(پیدا کردن تکراری ها)
فرض کنید مثل عکس زیر من 3 نفر به نام اسماعیلی دارم و می خوام هر 3 نفر رو پیدا کنم و در TextBox نشون بدم.چطور باید این کار رو بکنم؟

http://aks98.com/images/o2zavxlwjeounx5j4x0c.jpg

shamsololama
2010/08/08, 17:38
با درود فراوان
در مورد اینکه کنترلها برای شما باز نمیشه احتمالا آفیس رو کامل نسب نکردید اگر کامل نسب کنید فکر کنم درست میشه

و در مورد سئوال می خواهید جستجو را از چه کدام فیلد انجام دهید با نام و یا نام خانوادگی و یا سال و یا می خواهید فیلد جستوجو متغییر باشد که هر زمان خواستید برابر با فیلد دلخواه سرچ کنید
و معمولا برای جستو به نظرمن اگر از لیست باکس استفاده کنید بهتر از تکست باکس و راحت تر است ولی در هردو صورت امکان پذیر است
می توانید از
find
و همچنین از حلقه
for each
استفاده کنید

esyoo
2010/08/08, 18:15
با تشکر
من اکسل 2003و2007و2010 رو همزمان نصب دارم(البته فقط اکسل) و به صورت complete هم هست.اما متاسفانه درست نمیشه!(دوباره پاک کردم نصب کردم .نشد که نشد)

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

منظور شما از لیست باکس این هست؟(در مقایسه با کدی که در پست 3 معرفی کردید)
Private Sub TextBox1_Change()
On Error Resume Next
ListBox1.Text = ""
ListBox2.Text = ""
With Sheet1.Range("a1:a20000")
Set c = .Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlPart)
End With
If c.Text = TextBox1.Text Then
ListBox1.Text = c.Offset(0, 1).Text
ListBox2.Text = c.Offset(0, 2).Text
End If
End Sub

با تشکر

shamsololama
2010/08/09, 15:06
با درود فراوان

نه از لیست باکس بصورت زیر استفاده کنید کدی که در کلید جستجو قرار دارد هم بصورت زیر است


http://i.iimmgg.com/images/th/c5309c8e2e211505f272e2b6ea75855d.jpg (http://www.iimmgg.com/image/ca7e58b173c3481558242555d3ce225f)



Private Sub CommandButton1_Click()

For Each c In Range("a1:a10")
If c.Value = TextBox1.Text And c.Offset(0, 2).Value = TextBox2.Text Then

ListBox1.AddItem c
ListBox1.List(ListBox1.ListCount - 1, 1) = c.Offset(0, 1).Value
ListBox1.List(ListBox1.ListCount - 1, 2) = c.Offset(0, 2).Value
End If
Next
End Sub

esyoo
2010/08/12, 19:25
با تشکر از شما
حالا 3 تا مشکل دارم:
1)من یک اسم طولانی دارم و اصلا توی لیست باکس جا نمیشه!باید چکار کنم؟(به عکس توجه کنید)
3)توی عکسی که شما گذاشتید اسم و فامیل و سال دقیقا در مرکز هستند.چطور این کار رو کردید؟
2)اگر کلیک جستجو رو هر باز بزنم باز هم برام جستجو میکنه و لی من این رو نمیخوام.(به عکس توجه کنید)

http://aks98.com/images/6revqbgjv1ywa7fjez1_thumb.jpg (http://aks98.com/viewer.php?file=6revqbgjv1ywa7fjez1.jpg)

shamsololama
2010/08/14, 07:26
با درود فراوان
جواب سئوال یک :وقتی روی لیست باکس کلیک کرده اید درقسمت Properties نگاه کنید جلوی columnWidths اندازه ستون های لیست باکس را می توانید مشخص کنید مثل 200,300,400 که این اعداد همانطور که می بینید با کاما از هم جدا شده و به منظور این است ستون اول 200pt و ستون دوم 300pt و ستون سوم که به اندازه لیست باکس بستگی دارد اگر فضای باقی مانده بیشتر از 400 باشد همان فضای باقی مانده به آن اختصاص داده می شود و اگر کمتر باشد هم فضای لیست باکس بزرگتر می شود و نوار لغزنده آن ظاهر می شود

جواب سئوال دو: برای اینکار نیز در پرو پرتیس لیست باکس TextAlign رو تنظیم کن روی وسط چین

جواب سئوال سه :در بالای کد خود ListBox1.Clear اضافه کن مثل کد زیر با این کار هر بار قبل از جستجو لیست باکس را خالی می کند و بصورت تکراری جستو ها به لیست باکس اضافه نمی شوند.

Private Sub CommandButton1_Click()
ListBox1.Clear
For Each c In Range("a1:a10")
If c.Value = TextBox1.Text And c.Offset(0, 2).Value = TextBox2.Text Then

ListBox1.AddItem c
ListBox1.List(ListBox1.ListCount - 1, 1) = c.Offset(0, 1).Value
ListBox1.List(ListBox1.ListCount - 1, 2) = c.Offset(0, 2).Value
End If
Next
End Sub

esyoo
2010/08/15, 16:27
عبارت ListBox1.AddItem c
چه کاری رو انجام میده؟

موقع سرچ من می خوام 1380 دیده نشه و فقط نام و نام خانوادگی بیاد چه کار باید بکنم؟

http://aks98.com/images/6revqbgjv1ywa7fjez1_thumb.jpg


اگر عبارت ListBox1.AddItem c پاک کنم به مشکل بر می خورم!
میشه راهنمایی کنید

shamsololama
2010/08/15, 17:45
با درود فراوان

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

در واقع ListBox1.AddItem c هنگام جستجو c که متغیر است را در صورت برقرار بودن شرط
را ADD می کند با وارد لیست باکس می کند که اگر آن را وارد نکنیم یعنی ListBox1.AddItem c را پاک کنیم دچار مشکل می شود

و باید بجای C می نویسیم c.Offset(0, 1).Value

و بجایی c.Offset(0, 1).Value در خط دوم می نویسیم c.Offset(0, 2).Value

و خط سوم را پاک میکنیم یعنی
ListBox1.List(ListBox1.ListCount - 1, 1) = c.Offset(0, 2).Value


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


Private Sub CommandButton1_Click()
ListBox1.Clear
For Each c In Range("a1:a10")
If c.Value = TextBox1.Text And c.Offset(0, 2).Value = TextBox2.Text Then
ListBox1.AddItem c.Offset(0, 1).Value
ListBox1.List(ListBox1.ListCount - 1, 1) = c.Offset(0, 2).Value
End If
Next
End Sub

esyoo
2010/08/15, 19:38
با تشکر از شما
آیا امکان گذاشتن یک نمونه برای شما هست؟
من هر کار کردم نتونستم درست بن.یسمش
ممنون میشم راهنمایی بکنید
با تشکر

shamsololama
2010/08/16, 11:05
با درود فراوان

نمونه فایل

http://www.xlpar.com/qak69es66k3y/listbox.xls.html

esyoo
2010/08/16, 13:38
متاسفانه نتونستم دانلود کنم
اگر امکانش هست در http://www.4shared.com/ آپلود کنید.

http://aks98.com/images/zv1qrky4ankd0105f39v.jpg

shamsololama
2010/08/16, 15:50
با درود فراوان
این آدرسی که داده اید برای من باز نمیشه ممکنه از طرف شرکت خود ما بسته باشه

اگر از آدرس قبلی نتونستی دانلود کنی ایمیل بده تا برات بفرستم به ایمیلت

esyoo
2010/08/18, 22:22
سلام
ستون a ,b ,c,d رو در نظر بگیرید.
من میخوام هر وقت تا هر جا پر شد در لیست باکس نمایش بده.
اصلا هیچ قاعده و قانونی نداره!
ممکنه هر دفعه یک چیز باشه یک بار حرف یک بار عدد.
فقط هدف اینکه هر بار تا هر جا که پر شد در لیست باکس نمایش داده بشه
با تشکر

مثلا الان اینقدر پر هست.
http://aks98.com/images/6feaunukml7ggw5ri7kr.jpg




الان این قدر پر هست.
http://aks98.com/images/w2s60sqnudwfgc9r1r7o.jpg

m_d6712
2010/08/19, 00:15
اطلاعاتی که قراره در list قرار بگیره رو به صورت Table بزار!
یعنی همه اطلاعات رو table کن! ترجیحا نام ستون ها رو هم فعال کن!
Table خاصتی داره که وقتی در ستر زیرش مقداری اضافه می کنی آن سطر خود بخود به table اضافه می شود. و چون قراره شما Rowsourse رو برابر با این Table بزاری پس هر چه اطلاعات به این جدول اضافه شود به List شما هم اضافه می وشد. فکر کنم این طوری مشکل حل شود.


مثلا اسم Table رو گذاشتی Machines

در قسمت RowSource این مقدار رو بزار : Machines


فایل مثال:
http://www.mediafire.com/file/ec71a17p0zeh7pw/List.xlsm

esyoo
2010/08/20, 23:46
با تشکر از شما
من یک همچین مشکلی دارم.
در فایل توضیح داده شده.
http://www.4shared.com/file/CXwDWZ62/example_list.html

m_d6712
2010/08/21, 20:12
ابتدا محدوده ای که قراره کپی کنی رو تبدیل کن به Table1

این کد رو جایگزین کن:
Sub Macro1()
Range("table1").Select
Selection.Copy
Range("A2").Select
ActiveSheet.Paste
End Sub


فایل:
http://www.mediafire.com/file/cjqigda4d878hi5/example%20list.xlsm

esyoo
2010/08/26, 23:03
سلام
دوستان همان طور که در عکس زیر می بینید تایم ها به صورت 0.33 یا 0.5 برای من نشان داده شده
چکار کنم تا در لیست باکس به صورت تایم نمایش داده بشه؟مثلا 8:00
http://aks98.com/images/nd1vp5e6gg6vhdmcbvs9.jpg

m_d6712
2010/08/27, 06:14
برای من که به صورت تایم نوشته می شود. می خوای فایلتو بزار!

فیلدی که می خوای به صورت تایم نشون به رو نوعش رو Time کن ! نباید مشکلی باشه!

esyoo
2010/08/27, 12:56
برای من که به صورت تایم نوشته می شود. می خوای فایلتو بزار!

فیلدی که می خوای به صورت تایم نشون به رو نوعش رو Time کن ! نباید مشکلی باشه!

ممنون دوست عزیز
فایل رو پیوست کردم.
دقت کنید که من به صورتtable نمی خوام!
با تشکر
http://www.4shared.com/file/NYzJVIxM/find_time.html
کد 1 را وارد کنید.

m_d6712
2010/08/28, 02:28
برای من که به صورت تایم نوشته می شود. می خوای فایلتو بزار!

فیلدی که می خوای به صورت تایم نشون به رو نوعش رو Time کن ! نباید مشکلی باشه!

ممنون دوست عزیز
فایل رو پیوست کردم.
دقت کنید که من به صورتtable نمی خوام!
با تشکر
http://www.4shared.com/file/NYzJVIxM/find_time.html
کد 1 را وارد کنید.



این رو با کد خودت جایگزین کن؛ درست میشه!:::



Private Sub CommandButton1_Click()
For Each c In Range("a1:a20")
If c.Value = TextBox1.Text Then
ListBox1.AddItem c
ListBox1.List(ListBox1.ListCount - 1, 1) = c.Offset(0, 1).Text
ListBox1.List(ListBox1.ListCount - 1, 2) = c.Offset(0, 2).Text
ListBox1.List(ListBox1.ListCount - 1, 3) = c.Offset(0, 3).Text
ListBox1.List(ListBox1.ListCount - 1, 4) = c.Offset(0, 4).Text
ListBox1.List(ListBox1.ListCount - 1, 5) = c.Offset(0, 5).Text
End If
Next
End Sub