Page 1 of 1
ต้องการนำข้อมูลใน listbox มาแสดงใน sheet
Posted: Mon Nov 25, 2019 3:02 pm
by kittiwatw
สวัสดีค่ะ พอดีติดปัญหา นั่งคิดมาทั้งวันเลยจะทำยังไงดี
ต้องการนำข้อมูลที่อยู่ใน list box มาแสดงใน sheet "AU-..." เมื่อกดปุ่ม "Generate Checklist" สิ่งที่ต้องการให้โชว์ใน sheet นั้น คือข้อมูล "Detail" , "Process ID" และ "Checklist ID"
ซึ่งข้อมูลที่ดึงมานั้นมาจาก 2 แหล่ง ตามที่คิดไว้ คือ
แหล่งที่ 1 Process Form ข้อมูลที่อยู่ใน combobox1(Process) และ ข้อมูลที่อยู่ใน list box ด้านขวามือ
แหล่งที่ 2 ข้อมูล Checklist ID ที่อยู่ใน sheet "All Checklist"

ขอคำแนะนำหน่อยนะคะและขอบคุณสำหรับความช่วยเหลือค่ะ
พอดีไม่มีความรู้เรื่อง programming เลย เพิ่งมาเขียน vba ได้ อาทิตย์หนึ่ง อาศัยหาความรู้จาก internet แล้วศึกษาด้วยตนเอง ลองผิดลองดู ดูค่ะ

Re: ต้องการนำข้อมูลใน listbox มาแสดงใน sheet
Posted: Mon Nov 25, 2019 6:05 pm
by kittiwatw
ปัจจุบัน เขียน code ออกมาแบบนี้ค่ะ แต่ว่าปัญหาที่พบต่อมาก็คือ เมื่อเราทำการเลือก process ต่อไป เพื่อให้ checklist มาแสดงใน sheet "AU-..." ต่อท้ายรายการก่อนหน้านี้ พบว่า โปรมแกรม error ค่ะ
รบกวนช่วยดูให้หน่อยได้ไหมคะ ว่าต้องแก้ตรงไหนบ้าง ขอบคุณมากนะคะ
แนบไฟล์ล่าสุดมาให้ด้วยค่ะ
Code: Select all
Private Sub btGenChecklist_Click()
Dim rowIndex As Integer
rowIndex = 19
For Each myCell In lbInitializeRight.List
ActiveSheet.Cells(rowIndex, 3).Value = Sheet6.Cells(Trim(Split(myCell, ":")(0)), 6) 'detail
ActiveSheet.Cells(rowIndex, 6).Value = Sheet6.Cells(Trim(Split(myCell, ":")(0)), 2) 'processid
ActiveSheet.Cells(rowIndex, 7).Value = Sheet6.Cells(Trim(Split(myCell, ":")(0)), 3) 'checklistid
rowIndex = rowIndex + 1
Next myCell
End Sub
Re: ต้องการนำข้อมูลใน listbox มาแสดงใน sheet
Posted: Mon Nov 25, 2019 7:55 pm
by snasui

ตัวอย่างการนำข้อมูลใน ListBox ไปวางต่อท้ายค่าในเซลล์ครับ
Code: Select all
'Other code
rowIndex = Sheets("AU-01").Range("c" & Rows.Count).End(xlUp).row
For i = 1 To lbInitializeRight.ListCount
ActiveSheet.Cells(rowIndex, 3).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 6) 'detail
ActiveSheet.Cells(rowIndex, 6).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 2) 'processid
ActiveSheet.Cells(rowIndex, 7).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 3) 'checklistid
rowIndex = rowIndex + i
Next i
'Other code
Re: ต้องการนำข้อมูลใน listbox มาแสดงใน sheet
Posted: Mon Nov 25, 2019 9:00 pm
by kittiwatw
สวัสดีค่ะ อาจารย์
ลองนำ code ที่อาจารย์ปรับแก้มาให้ complie ดู ผลลัพธ์ได้ภาพค่ะ
ข้อมูล checklist อันแรก ไปแทนที่ header ของ table และข้อมูลไม่ได้เรียงบรรทัดลงมา มีการเว้นบรรทัด
รวบกวนขอคำแนะนำจากอาจารย์หน่อยนะคะ ว่ามีตรงไหนผิดพลาดหรือเปล่าค่ะ
ขอบพระคุณมากค่ะ
Re: ต้องการนำข้อมูลใน listbox มาแสดงใน sheet
Posted: Mon Nov 25, 2019 9:28 pm
by snasui

ควรแนบไฟล์พร้อม Code ที่แก้มาด้วยจะได้เห็นว่าแก้ตรงไหน อย่างไรครับ
ถ้าแก้ถูกต้องจะต้องไม่เว้นบรรทัด เพราะไม่มีบรรทัดไหนใน Code ที่ผมปรับให้เว้นบรรทัดครับ
Re: ต้องการนำข้อมูลใน listbox มาแสดงใน sheet
Posted: Mon Nov 25, 2019 9:33 pm
by kittiwatw
นำ Code ที่อาจารย์ให้มาแปะลงไปแทนที่ code ชุดเดิมของตัวเองเลยค่ะ แล้วลอง complie
แนบไฟล์มาให้ด้วยค่ะ
Code: Select all
Private Sub btGenChecklist_Click()
Dim rowIndex As Integer
rowIndex = Sheets("AU-01").Range("c" & Rows.Count).End(xlUp).row
For i = 1 To lbInitializeRight.ListCount
ActiveSheet.Cells(rowIndex, 3).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 6) 'detail
ActiveSheet.Cells(rowIndex, 6).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 2) 'processid
ActiveSheet.Cells(rowIndex, 7).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 3) 'checklistid
rowIndex = rowIndex + i
Next i
End Sub
Re: ต้องการนำข้อมูลใน listbox มาแสดงใน sheet
Posted: Mon Nov 25, 2019 9:45 pm
by snasui

ปรับ Code ใหม่เป็นตามภาพครับ
Code: Select all
'Other code
For i = 1 To lbInitializeRight.ListCount
ActiveSheet.Cells(rowIndex + i, 3).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 6) 'detail
ActiveSheet.Cells(rowIndex + i, 6).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 2) 'processid
ActiveSheet.Cells(rowIndex + i, 7).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 3) 'checklistid
Next i
'Other code
การทดสอบการรัน Code เรียกว่า "ทดสอบ" ไม่เรียกว่า "Compile" ส่วนการ Compile คือการเข้าเมนู Debug > Compile VBAProject เพื่อจะทดสอบว่า Code ถูกต้องตรงตาม Statement ที่ควรจะเป็น มีการประกาศตัวแปรก่อนใช้งานหรือไม่ ฯลฯ ครับ
Re: ต้องการนำข้อมูลใน listbox มาแสดงใน sheet
Posted: Mon Nov 25, 2019 10:13 pm
by kittiwatw
ขอขอบคุณ อาจารย์_/\_ สำหรับคำแนะนำในการเรียกการ "ทดสอบ" อย่างถูกต้องนะคะ
มีเพิ่มเติมค่ะ อาจารย์ ตอนนี้ที่เขียน code ได้ทำการกำหนด rowIndex = 18 จากนั้นวน loop ให้ + rowIndex ไปเรื่อยๆตามที่ อาจารย์แนะนำ
ปัญหาที่พบต่อมาคือ ถ้าเราต้องการเลือก รายการ checklist ใหม่ กลายเป็นว่า สิ่งที่เลือกใหม่นั้น มาทับข้อความก่อนหน้านี้ค่ะ
ตัวอย่างเช่น
เลือกครั้งที่ 1 Process "Test" เลือก Phase "Planning" เลือก checklist 1-3 กด Gen...
เลือกครั้งที่ 2 Process "Test" เลือก Phase "Test Execution" เลือก Checklist 1-2 กด Gen...
เราสามารถแก้ไขค่า rowIndex เป็นอะไรได้บ้างคะ
ขอบคุณสำหรับความช่วยเหลือค่ะ
Code: Select all
Private Sub btGenChecklist_Click()
Dim rowIndex As Integer
rowIndex = 18
For i = 1 To lbInitializeRight.ListCount
ActiveSheet.Cells(rowIndex + i, 3).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 6) 'detail
ActiveSheet.Cells(rowIndex + i, 6).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 2) 'processid
ActiveSheet.Cells(rowIndex + i, 7).Value = Sheet6.Cells(Trim(Split(lbInitializeRight.List(i - 1), ":")(0)), 3) 'checklistid
Next i
End Sub
Re: ต้องการนำข้อมูลใน listbox มาแสดงใน sheet
Posted: Mon Nov 25, 2019 10:24 pm
by snasui
kittiwatw wrote: Mon Nov 25, 2019 10:13 pm
เราสามารถแก้ไขค่า rowIndex เป็นอะไรได้บ้างคะ

สังเกตได้ที่โพสต์ #3 ว่าผมตอบไปเป็นเช่นไร ให้ใช้ตามนั้น งานลักษณะที่จะต้องเพิ่มบรรทัดไปเรื่อย ๆ เราจะไม่กำหนดให้เท่ากับค่าคงที่ใด ๆ ครับ
Re: ต้องการนำข้อมูลใน listbox มาแสดงใน sheet
Posted: Mon Nov 25, 2019 10:28 pm
by kittiwatw
ต้องขอโทษ อาจารย์ด้วยค่ะ

ที่ดูรายละเอียดไม่ถี่ถ้วน ตอนนี้ทดสอบ code ได้ถูกต้องตามความต้องการแล้วค่ะ