ปริ้นข้อมูลที่ถูกกรองโดย Combo box และ Text Searchต้องเขียนคำสั่งไปในทางไหนครับ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

06 ก.ค. 64 , 14:03:11
อ่าน 312 ครั้ง

001Jetnipit

ตอนนี้ทำ VBA ในการค้นหาสำเร็จแล้วครับ แต่ไม่ทราบว่าต้องทำยังไงให้ Report กรองข้อมูลตามที่เราค้นหาได้ครับ รบกวนชี้แนะด้วยครับ :cry:

« แก้ไขครั้งสุดท้าย: 07 ก.ค. 64 , 08:32:26 โดย 001Jetnipit »

 

07 ก.ค. 64 , 09:35:51
ตอบกลับ #1

PNR

สามารถทำได้โดย
1.สร้างตัวรายงานขึ่นมา 1 อันที่มี RecordSource เดี่ยวกันกับที่มีอยู่บน Form
2.สร้างปุ่มสำหรับปริ้นใส่โค้ดเข้าไป
สมมุติชื่อ frmMain   'ชื่อฟอร์มหลัก
สมมุติชื่อ frmSub    'ชื่อซับฟอร์ม
กรณีที่ form ไม่มีฟอร์มย่อย  ก็ใส่ set frm เป็น Set frm = Forms!frmMain.Form
กรณีที่ form มีฟอร์มย่อย  ก็ใส่ set frm เป็น Set frm = Forms!frmMain.frmSub.Form
สมมุติชื่อรายงานที่จะแสดงชื่อ Report1

Private Sub CmbPrint_Click()
Dim frm As Form
Set frm = Forms!frmMain.frmSub.Form
If frm.FilterOn Then
DoCmd.OpenReport "Report1", acViewPreview, , frm.Filter
Else
DoCmd.OpenReport "Report1", acViewPreview
End If
End Sub

« แก้ไขครั้งสุดท้าย: 07 ก.ค. 64 , 09:41:55 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

07 ก.ค. 64 , 10:01:45
ตอบกลับ #2

001Jetnipit

สามารถทำได้โดย
1.สร้างตัวรายงานขึ่นมา 1 อันที่มี RecordSource เดี่ยวกันกับที่มีอยู่บน Form
2.สร้างปุ่มสำหรับปริ้นใส่โค้ดเข้าไป
สมมุติชื่อ frmMain   'ชื่อฟอร์มหลัก
สมมุติชื่อ frmSub    'ชื่อซับฟอร์ม
กรณีที่ form ไม่มีฟอร์มย่อย  ก็ใส่ set frm เป็น Set frm = Forms!frmMain.Form
กรณีที่ form มีฟอร์มย่อย  ก็ใส่ set frm เป็น Set frm = Forms!frmMain.frmSub.Form
สมมุติชื่อรายงานที่จะแสดงชื่อ Report1

Private Sub CmbPrint_Click()
Dim frm As Form
Set frm = Forms!frmMain.frmSub.Form
If frm.FilterOn Then
DoCmd.OpenReport "Report1", acViewPreview, , frm.Filter
Else
DoCmd.OpenReport "Report1", acViewPreview
End If
End Sub

ลองแล้วครับ มันก็ยังขึ้นมาทุก Record เหมือนเดิมเลยครับ รบกวนเช็คให้หน่อยครับ ผมพลาดตรงไหนหรือเปล่า












ตรงเส้นสีเขียวผมจะบอกว่าผมน่าจะอิง Form ถูกนะครับเพราะ Search ผมใช้อิแบบนี้มันก็ใช้ได้




« แก้ไขครั้งสุดท้าย: 07 ก.ค. 64 , 10:55:06 โดย 001Jetnipit »

 

07 ก.ค. 64 , 11:21:53
ตอบกลับ #3

PNR

Set frm = Forms![Navigation_Form]![NavigationSubform]![PTT].Form

ผมลองสร้างให้อยู่ใน Navigation_Form ดูสามารถทำได้

เช็คการตั้งชื่อของฟอร์มแต่ละอันว่าตรงกันไหมกับโค้ดด้านบน
โดยการดูชื่อคลิ๊กที่กรอบของฟอร์มแล้วดูตรงชื่อ


ตัวอย่างการตั้งค่าด้านล่าง
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

07 ก.ค. 64 , 11:38:42
ตอบกลับ #4

001Jetnipit

Set frm = Forms![Navigation_Form]![NavigationSubform]![PTT].Form

ผมลองสร้างให้อยู่ใน Navigation_Form ดูสามารถทำได้

เช็คการตั้งชื่อของฟอร์มแต่ละอันว่าตรงกันไหมกับโค้ดด้านบน
โดยการดูชื่อคลิ๊กที่กรอบของฟอร์มแล้วดูตรงชื่อ


เช็คแล้วครับพี่ก็ตรงกันนะครับ แต่ยังไม่ได้ครับ







 

07 ก.ค. 64 , 11:43:21
ตอบกลับ #5

PNR

อ่อ มันไม่ได้ใช้การ filter ข้อมูลนะครับ ใช้ bookmark ใช่ไหม
งั้นโค้ดเงื่อนไข ต้องแก้ เดี่ยวขอปรับแก้แปป
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

07 ก.ค. 64 , 11:47:04
ตอบกลับ #6

001Jetnipit

อ่อ มันไม่ได้ใช้การ filter ข้อมูลนะครับ ใช้ bookmark ใช่ไหม
งั้นโค้ดเงื่อนไข ต้องแก้ เดี่ยวขอปรับแก้แปป

ใช่ครับ ครับผม ขอบคุณครับ

 

07 ก.ค. 64 , 12:25:39
ตอบกลับ #7

PNR

ที่ปุ่มปริ้นใส่แบบนี้ครับ โค้ดจะไปจับ ID ของแต่ละ Record ที่มีบนฟอร์ม มาแสดงในรายงานแบบเดียวกัน

โค๊ด: [Select]
Dim rsc As DAO.Recordset
Dim StrWhere As String
     Set rsc = Forms![Navigation_Form]![NavigationSubform]![PTT].Form.RecordsetClone
        rsc.MoveFirst
     Do While Not rsc.EOF
        StrWhere = StrWhere & " OR ID=" & rsc!ID
        rsc.MoveNext
     Loop
        If Len(StrWhere) > 0 Then
           StrWhere = Right(StrWhere, Len(StrWhere) - 4)
        End If
     DoCmd.OpenReport "ptt", acViewPreview, , StrWhere
« แก้ไขครั้งสุดท้าย: 07 ก.ค. 64 , 13:30:18 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

07 ก.ค. 64 , 13:03:12
ตอบกลับ #8

001Jetnipit

ที่ปุ่มปริ้นใส่แบบนี้ครับ โค้ดจะไปจับ ID ของแต่ละ Record ที่มีบนฟอร์ม มาแสดงในรายงานแบบเดียวกัน


ขอบคุณครับ ได้แล้วครับ :grin: :grin: :grin:

 


บอร์ดเรียนรู้ Access สำหรับคนไทย