การแสดงข้อมูลที่ Filter
Posted: Sun Jul 24, 2011 9:22 pm
สวัสดีครับอาจารย์ มาทีไรก็นำปัญหามาสู่อาจารย์
อาจารย์ครับผมเขียนคำสั่งเพื่อกรองข้อมูลสัญญาของลูกค้าที่เราระบุ ซึ่งบางคนอาจมีแค่1 หรือ30 สัญญา แล้วนำผลกรองไปแสดงที่Listbox
ปัญหาแรกคือหากกำหนดที่ListBoxให้ Rowsource Propeties : FileB!A:S
ผลที่ได้คือListBox แสดงข้อมูลในชีทFileB ทั้งหมดแม้หน้านั้นจะผ่านคำสั่งกรองข้อมูลแล้ว
ผมเลยแก้ปัญหาโดยการเพิ่มคำสั่งให้ Coppy ชีทFileB ที่แสดงผลการกรองแล้วไปวางที่อีกชีทหนึ่ง(ชื่อชีท Coplone) แล้วกำหนดกำหนดที่ListBoxให้ Rowsource Propeties : Coplone!A1:S100
เพื่อให้ListBox แสดงค่าที่ผ่านการกรองแล้ว คำสั่งดังนี้ครับ
Private Sub CommandButton6_Click() 'ค้นหาลูกค้า
Dim lng As Long, rs As Range, rt As Range
Dim ry As Range
Dim ri As Range
Dim cri As String
Sheet9.Activate
Sheet9.Range("A:S").AutoFilter Field:=3
With Worksheets("FileA")
On Error Resume Next
lng = Application.Match(Sheet15.Range("A1"), .Range("A:A"), 0)
Set rs = .Range("A" & lng).Resize(, 21)
Set rt = Sheet15.Range("A3")
End With
If Err > 0 Then
MsgBox "ไม่พบข้อมูล อาจเป็นลูกค้าใหม่" & vbCrLf & "ท่านต้องสร้างทะเบียนใหม่ด้วยตัวเอง หรือโหลด PALM ใหม่", vbOKOnly, "DumP"
Else
rs.Copy: rt.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Rep.Rep
Application.ScreenUpdating = True
End If
With Workbooks("DumP.xlsm").Worksheets("FileB") ชีทที่เป็นตารางสัญญากู้
Set ri = Workbooks("DumP.xlsm").Worksheets("FileB").Range("A:S")
cri = Sheet15.Range("A1").Value 'เงื่อนไขการกรองเลขทะเบียนลูกค้า
End With
With Workbooks("DumP.xlsm").Worksheets("Coplone") ' ชีทที่ให้วางCoppy ผลจากการกรอง
Set ry = Workbooks("DumP.xlsm").Worksheets("Coplone").Range("A:S")
End With
Sheet9.Activate
Sheet9.Range("A:S").AutoFilter Field:=3, Criteria1:=cri
ri.Copy: ry.PasteSpecial xlPasteValues 'เพื่อให้แสดงข้อมูลที่ผ่านการกรอง
Application.CutCopyMode = False
Application.ScreenUpdating = True If Err > 0 Then
Exit Sub
End If
End Sub
อาจารย์ครับทุกอย่างได้ผลอย่างต้องการครับ แต่ไม่น่าพอใจครับ รู้สึกว่าช้าเพราะคำสั่งCoppyหน้าที่กรองนั้น
เวลามันCoppyมันCoppy ทั้งชีทแม้เราจะเห็นข้อมูลแค่ส่วนที่กรอง
มีวิธีการไหนบ้างครับที่ให้Coppy หรือส่งข้อมูลไปเฉพาะค่าที่ผ่านการกรองแล้ว
หรือสามารถกำหนดให้ListBox แสดงค่าที่ผ่านการกรองแล้ว(ขั้นตอนต่อไปคือเมื่อผู้ใช้คลิ๊กเลือกสัญญาในlistBox ผมก็จะให้แสดงรายละเอียดของสัญญา งวดชำระต่อไป)
อาจารย์ครับผมเขียนคำสั่งเพื่อกรองข้อมูลสัญญาของลูกค้าที่เราระบุ ซึ่งบางคนอาจมีแค่1 หรือ30 สัญญา แล้วนำผลกรองไปแสดงที่Listbox
ปัญหาแรกคือหากกำหนดที่ListBoxให้ Rowsource Propeties : FileB!A:S
ผลที่ได้คือListBox แสดงข้อมูลในชีทFileB ทั้งหมดแม้หน้านั้นจะผ่านคำสั่งกรองข้อมูลแล้ว
ผมเลยแก้ปัญหาโดยการเพิ่มคำสั่งให้ Coppy ชีทFileB ที่แสดงผลการกรองแล้วไปวางที่อีกชีทหนึ่ง(ชื่อชีท Coplone) แล้วกำหนดกำหนดที่ListBoxให้ Rowsource Propeties : Coplone!A1:S100
เพื่อให้ListBox แสดงค่าที่ผ่านการกรองแล้ว คำสั่งดังนี้ครับ
Private Sub CommandButton6_Click() 'ค้นหาลูกค้า
Dim lng As Long, rs As Range, rt As Range
Dim ry As Range
Dim ri As Range
Dim cri As String
Sheet9.Activate
Sheet9.Range("A:S").AutoFilter Field:=3
With Worksheets("FileA")
On Error Resume Next
lng = Application.Match(Sheet15.Range("A1"), .Range("A:A"), 0)
Set rs = .Range("A" & lng).Resize(, 21)
Set rt = Sheet15.Range("A3")
End With
If Err > 0 Then
MsgBox "ไม่พบข้อมูล อาจเป็นลูกค้าใหม่" & vbCrLf & "ท่านต้องสร้างทะเบียนใหม่ด้วยตัวเอง หรือโหลด PALM ใหม่", vbOKOnly, "DumP"
Else
rs.Copy: rt.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Rep.Rep
Application.ScreenUpdating = True
End If
With Workbooks("DumP.xlsm").Worksheets("FileB") ชีทที่เป็นตารางสัญญากู้
Set ri = Workbooks("DumP.xlsm").Worksheets("FileB").Range("A:S")
cri = Sheet15.Range("A1").Value 'เงื่อนไขการกรองเลขทะเบียนลูกค้า
End With
With Workbooks("DumP.xlsm").Worksheets("Coplone") ' ชีทที่ให้วางCoppy ผลจากการกรอง
Set ry = Workbooks("DumP.xlsm").Worksheets("Coplone").Range("A:S")
End With
Sheet9.Activate
Sheet9.Range("A:S").AutoFilter Field:=3, Criteria1:=cri
ri.Copy: ry.PasteSpecial xlPasteValues 'เพื่อให้แสดงข้อมูลที่ผ่านการกรอง
Application.CutCopyMode = False
Application.ScreenUpdating = True If Err > 0 Then
Exit Sub
End If
End Sub
อาจารย์ครับทุกอย่างได้ผลอย่างต้องการครับ แต่ไม่น่าพอใจครับ รู้สึกว่าช้าเพราะคำสั่งCoppyหน้าที่กรองนั้น
เวลามันCoppyมันCoppy ทั้งชีทแม้เราจะเห็นข้อมูลแค่ส่วนที่กรอง
มีวิธีการไหนบ้างครับที่ให้Coppy หรือส่งข้อมูลไปเฉพาะค่าที่ผ่านการกรองแล้ว
หรือสามารถกำหนดให้ListBox แสดงค่าที่ผ่านการกรองแล้ว(ขั้นตอนต่อไปคือเมื่อผู้ใช้คลิ๊กเลือกสัญญาในlistBox ผมก็จะให้แสดงรายละเอียดของสัญญา งวดชำระต่อไป)