มีปัญหาเกี่ยวกับ Listbox
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 281   7
URL.หัวข้อ / URL
มีปัญหาเกี่ยวกับ Listbox

คำถามที่ 1
ผมมีข้อมูลอยู่ใน listbox เช่น
1 นาย ก
2 นาย ข
3 นาย ค
เมื่อกดปุ่มบันทึก ให้ Add ข้อมูลเข้าตาราง Name ทั้งหมด ทั้ง 3 ข้อมูลในการกดปุ่มครั้งเดียวต้องทำอย่างไรครับ

คำถามที่ 2
ต้องการเลือกข้อมูลเข้าออกระหว่าง Listbox 2 อัน เหมือนเวลาสร้าง Forms ด้วย Wizard
ทำอย่างไรครับ

7 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R05616
ลองดูตัวอย่างที่ http://support.microsoft.com/default.aspx?scid=kb;en-us;278378&Product=acc2003 ครับ
2 @R05622
ผมลองตัวอย่างง่ายๆให้ดู แล้วนำไปปรับใช้เองครับ..
3 @R05633
โชดดีที่เคยเก็บ Code ของทาง Expert ผู้หนึ่งไว้ (เป็นชาวต่างชาติครับ ประเทศอะไรไม่รู้)
Code ที่เขาเขียนไว้ คล้ายกับว่าเป็นภาษา เยอรมัน หรือไม่ก็ ใกล้เคียงกับ สาธารณรัฐเชค อะไรประมาณนี้แหละ

แต่ว่า ใช้ได้ ดีมากเลยครับ
ขออนุญาตนำมาเผยแพร่ ไม่น่าจะว่ากัน

Download ตัวอย่าง ทดลองดูนะครับ
ผมนำมาเรียบเรียงใหม่ ให้ดูง่ายขึ้น
แต่ ผมก็ไม่เข้าใจทั้งหมด

อ. ท่านต่างๆ ถ้าเข้าใจแล้ว ชี้แนะกันด้วยนะครับ
4 @R05655
ตามที่ อ.สุภาพแนะนำ
Private Sub Command1_Click()
MoveAllItems "List1", "List2"
End Sub

Private Sub Command2_Click()
MoveSigleItem "List1", "List2"
End Sub

Sub MoveSigleItem(strSourceControl As String, strTargetControl As String)
Dim strItem As String
Dim intColumnCount As Integer
For intColumnCount = 0 To Me.Controls(strSourceControl).ColumnCount - 1
strItem = strItem & Me.Controls(strSourceControl).Column(intColumnCount) & ";"
Next
strItem = Left(strItem, Len(strItem) - 1)
'µÃǨÊͺ´ÙÇèÒÁÕ¡ÒÃàÅ×Í¡¢éÍÁÙÅã¹ List
If Len(strItem) > 0 Then
Me.Controls(strTargetControl).AddItem strItem
Me.Controls(strSourceControl).RemoveItem strItem
Me.Controls(strSourceControl).ListIndex
Else
MsgBox "¡ÃسÒàÅ×Í¡¢éÍÁÙÅâ´Â¡Òà Click ã¹ List"
End If
End Sub

Private Sub Command3_Click()
MoveAllItems "List2", "List1"
End Sub

Private Sub Command4_Click()
MoveSigleItem "List2", "List1"
End Sub

Private Sub Form_Load()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String, strItem As String
strSQL = "SELECT Name.NameT FROM Name; "
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
Do Until rs.EOF
strItem = rs.Fields("NameT").Value
Me.List1.AddItem strItem
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
Sub MoveAllItems(strSourceControl As String, strTargetControl As String)
Dim strItem As String
Dim intColumnCount As Integer
Dim lngRowCount As Long
For lngRowCount = 0 To Me.Controls(strSourceControl).ListCount - 1
For intColumnCount = 0 To Me.Controls(strSourceControl).ColumnCount - 1
strItem = strItem & Me.Controls(strSource).Column(intColumnCount, lngRowCount) & ";"
Next
strItem = Left(strItem, Len(strItem) - 1)
Me.Controls(strTargetControl).AddItem strItem
strItem = ""
Next
Me.Controls(strSourceControl).RowSource = ""
End Sub
ที่ Sub MoveSingleItem บรรทัด
Me.Controls(strSourceControl).RemoveItem
และ
Me.Controls(strSourceControl).ListIndex
Run แล้ว Err
ผมแก้เป็น
Me.Controls(strSourceControl).RemoveItem strItem
ไม่รูว่าถูกต้องหรือไม่ และบรรทัด
Me.Controls(strSourceControl).ListIndex
ผมให้ข้ามไม่ Run เพราะไม่รู้จะเติมอะไรลงไป
ก็สามารถทำได้ปกติ
ปัญหา เมื่อผม RemoveAll จาก List1ไป List 2
แล้วผม RemoveAll List 2 ไป List 1
มันก็ Remove แต่หายไปไหนไม่ทราบ ไม่เข้ามาอยู่ใน List1

File แนน Acess 2002 ครับ


5 @R05662
File 2002 Version
6 @R05664
โค้ดในส่วนของ AddAllItems มีผิดอยู่จุดหนึ่งครับ

ให้ลองใส่

Option Explicit

ไว้บันทัดที่ 2 รองจาก

Option Compare Database

แล้วสั่งให้ compile ใหม่ ก็จะเจอจุดที่ผิดครับ

นี่คือข้อดีของการใส่ Option Explicit ไว้ที่บันทัดที่ 2 ของทุก Module ครับ

ในเวอร์ชันใหม่ๆ Access จะไม่ใส่ให้โดยอัตโนมัติ
ให้เข้าไปที่เมนู Tools>Options>Editor tab>เลือก Require Variable Declaration ครับ
7 @R05674
ผิดจริงๆด้วย
strItem = strItem & Me.Controls(strSource).Column(intColumnCount, lngRowCount) & ";"
แก้เป็น
strItem = strItem & Me.Controls(strSourceControl).Column(intColumnCount, lngRowCount) & ";"
ขอบคุณครับอาจารย์
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0405s