ฟังก์ชั่นนี้ผมใช้ค่อนข้างบ่อยครับ เนื่องจาก แนวการเขียนโปรแกรมผมชอบทำเป็น pop-up form ที่สามารถเปิดทำงานได้หลายหน้าต่างพร้อมกัน
ปัญหาจะเกิดขึ้นเมื่อ มีฟอร์มบางฟอร์มหรือรายงาน ที่เราเปิดขึ้นแล้ว ไม่ได้ปิดออก เช่น รายงานสรุปยอดขายลูกค้าประจำเดือน 6/2018 หากเราต้องการเปิดอีกรายงานหนึ่งขึ้นมาเป็นของเดือน 7/2018 โดยลืมปิดรายงานเดิม ผลก็คือมันจะไม่แสดง เดือนล่าสุดที่เราต้องการครับ
ปัญหานี้แก้ง่าย ๆ ครับ ใช้ VBA ช่วย โดยเขียนเข้าไปในปุ่มแสดงรายงาน Event On click (ตอนที่เราจะคลิก โชว์หน้ารายงานนั่นแหล่ะครับ)
ถ้าเป็นฟอร์ม ใช้รูปแบบแบบนี้ครับ
If (CurrentProject.AllForms("ชื่อฟอร์ม").IsLoaded = True) Then ' ฟอร์มเปิดอยู่ Else ' ฟอร์มไม่ได้เปิด End If
ถ้าเป็นรายงาน ก็น่าจะพอเดาได้ครับ ใช้แบบนี้ครับ
If (CurrentProject.AllReports("ชื่อรายงาน").IsLoaded = True) Then ' รายงานเปิดอยู่ Else ' รายงานไม่ได้เปิด End If
ส่วนฟังก์ชั่นเกี่ยวกับการเปิด-ปิด ฟอร์ม รายงาน ใช้รูปแบบประมาณนี้ครับ
DoCmd.OpenForm "ชื่อฟอร์มที่จะเปิด", acNormal DoCmd.Close acForm, "ชื่อฟอร์มที่จะปิด" DoCmd.OpenReport "ชื่อรายงานที่จะเปิด", acViewNormal DoCmd.Close acReport, "ชื่อรายงานที่จะปิด"
สุดท้าย ถ้าเกิดเราอยากให้เวลาคลิกปุ่ม เปิดรายงาน แล้วให้ระบบเช็คให้ว่ารายงานนี้เปิดแล้วหรือยัง ถ้าเปิดแล้วให้ปิดก่อน แล้วค่อยเปิดใหม่ใช้รูปแบบนี้ครับ
Private Sub btn_openreport_Click() ' Event onclick ของปุ่ม btn_openreport If (CurrentProject.AllReports("ชื่อรายงาน").IsLoaded = True) Then DoCmd.Close "ชื่อรายงาน" End If DoCmd.OpenReport "ชื่อรายงาน", acViewNormal End Sub