Page 1 of 1
มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ
Posted: Sun Feb 27, 2011 5:35 am
by LeeNa
สวัสดีค่ะ...
รบกวนขอคำแนะนำผู้รู้ vba ค่ะ เพราะมือใหม่จริงๆ
ลองฝึกเขียนโค้ดง่ายๆ มาบ้างแล้ว ตอนนี้กำลังเรียนรู้เรื่อง array ค่ะ
คืออยากสร้าง input box ใส่ตัวเลขหลายๆ ตัว
แล้วแสดงผลตัวเลขเรียงลำดับจากมากไปน้อยค่ะ
ไม่ทราบว่าสามารถทำได้หรือไม่ค่ะ
ลอง search หาดูส่วนมากจะเจอให้ใส่ค่าใน Excel แล้วเขียนโค้ด
แต่เป็นไปได้หรือไม่ที่จะรับค่าจาก input box มาเก็บไว้ค่ะ
ลองแนบไฟล์ที่ลองทำมาให้ดูค่ะ
รับค่าได้แล้ว แต่แสดงผลไม่ได้ค่ะ
รบกวนด้วยนะคะ

Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ
Posted: Sun Feb 27, 2011 8:28 am
by snasui
Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ
Posted: Sun Feb 27, 2011 5:38 pm
by snasui

ผมลองทำตัวอย่างการ Sort แบบ Bubble Sort ตามด้านล่าง ลองปรับใช้กับงานจริงดูครับ
Code: Select all
Sub BubbleSort(List() As Integer)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i) > List(j) Then
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
End Sub
Sub SortArrayNums()
Dim a(5) As Integer
Dim i As Integer
a(0) = 8
a(1) = 3
a(2) = 2
a(3) = 10
a(4) = 1
BubbleSort a()
For i = 1 To UBound(a)
MsgBox a(i)
Next i
End Sub
Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ
Posted: Thu Mar 03, 2011 8:05 pm
by LeeNa
ขอบคุณมากๆ ค่ะ คุณsnasui
ลองศึกษา และปรับใช้แล้วค่ะ
ขอบคุณที่ช่วยเหลือนะคะ...
Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ
Posted: Thu Mar 03, 2011 8:14 pm
by LeeNa
รบกวนถามเพิ่มเติมค่ะ
ตอนนี้ฝึกทำ userform ค่ะ
แต่งมอยู่หลายวัน ไม่เป็นผลค่ะ
คือ..สร้าง textbox 3 อัน ให้ใส่ชื่อ นามสกุล และ อายุค่ะ
พอกดปุ่ม Add แล้วอยากให้แสดงผลใน listbox ซึ่งเป็น multi-column listbox ค่ะ
มีปัญหาคือ ไม่สามารถแสดงค่าใน listbox ได้ค่ะ
แต่ถ้าใส่เพียง 1 column สามารถแสดงค่าได้ค่ะ แต่รู้สึกว่าอ่านยากแล้วดูไม่เป็นระบบ เลยอยากทราบว่ามีวิธีแสดงผลสำหรับหลายคอลัมน์หรือไม่คะ

Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ
Posted: Thu Mar 03, 2011 9:20 pm
by snasui

ลองส่งตัวอย่างไฟล์มาดูครับ
Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ
Posted: Fri Mar 04, 2011 5:07 am
by LeeNa
แนบไฟล์ค่ะ
อาจจะดูงงๆนะคะ เพราะทำไป หาข้อมูลจากแต่ละฟอรัมไปปรับใช้ค่ะ
1. ประเด็นคือไม่ค่อยเข้าใจเรื่อง class แต่พยายามจะลองใช้ เลยไม่มั่นใจว่าควรเขียนโค้ดที่ไหนดีระหว่าง class กับ form ค่ะ
2. ลองแก้ไขโค้ด ปรากฎว่าแสดงใน listbox แล้ว แต่พอใส่ข้อมูลเข้าไปรายการที่ 2 กลับไปแทนที่เดิม ไม่ยอมขึ้นบรรทัดใหม่ค่ะ
(อยากให้ขึ้นผลแบบใน sheet excel ค่ะ)
3. คิดว่าสืบเนื่องจากข้อ 2 เลยยังไม่สามารถ sort data ได้ค่ะ
4. อยากทราบว่า sort data จำเป็นต้องเขียนเป็นฟังก์ชั่นหรือไม่คะ
รบกวนหลายคำถามเลยค่ะ...ตอนนี้เริ่มท้อแท้กับการศึกษา vb
เพราะใช้เวลามาสองสัปดาห์เต็มๆ กับโจทย์นี้ค่ะ
แต่ยังไงก็จะพยายามหาโจทย์ใหม่ทำเรื่อยๆค่ะ

ขอบคุณความรู้อันมากมายจากเวปนี้จริงๆ ค่ะ
Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ
Posted: Sat Mar 05, 2011 7:07 am
by snasui

ปกติการใช้ Class ก็เพื่อกำหนด Object , Properties, Method, Events ต่าง ๆ ขึ้นมาเองได้ เป็นประโยชน์ได้หากใช้ Window API Function แล้วมันดูซับซ้อนวุ่นวาย ก็สามารถเขียน Class ขึ้นมาใช้เองได้ครับ
ส่วน Form ก็เพื่อใช้ในลักษณะของ UI (User Interface) สามารถไปอ้างอิงเอา Object, Properties, Method , Events จาก Class ที่เราสร้างขึ้นเองมาใช้ได้
สำหรับการ Sort ใน VBA นั้นจะเขียนฟังก์ชั่นหรือไม่เขียนฟังก์ชั่นขึ้นมาก็ได้ครับ
ส่วนการ Add Item ใน Muti Column ListBox นั้นรู้สึกว่าจะทำไม่ได้ครับ
ที่ผมคิดว่าน่าจะทำได้ก็คือต้องเขียน Array ให้รับค่าจาก TextBox กรณีมีการ Add Item ก็เป็นการเพิ่มสมาชิกของ Array นั้น จากนั้นนำ Array มา Loop วางค่าต่าง ๆ ลงใน ListBox หากมีเวลาจะลองทดสอบดูครับ
Re: มือใหม่ลองทำเรียงลำดับข้อมูลค่ะ..ขอคำแนะนำค่ะ
Posted: Sun Mar 06, 2011 9:35 pm
by snasui

ผมใช้ ListCount มาช่วยในการ AddItem ตาม Code ด้านล่างครับ
Code: Select all
Private Sub cmdAddStock_Click()
With frmStock.lstSelectStock
.ColumnCount = 5
.ColumnWidths = "90;60;40;60;40"
.AddItem
.Column(0, .ListCount - 1) = frmStock.cboStockName.Text
.Column(1, .ListCount - 1) = frmStock.cboStockName.Text
.Column(2, .ListCount - 1) = frmStock.txtStockID.Text
.Column(3, .ListCount - 1) = frmStock.txtReturn.Text
.Column(4, .ListCount - 1) = frmStock.txtSD.Text
End With
End Sub
ดูไฟล์แนบประกอบครับ