VBA Access เช็คว่า Form,Report เปิดอยู่หรือเปล่า

ฟังก์ชั่นนี้ผมใช้ค่อนข้างบ่อยครับ เนื่องจาก แนวการเขียนโปรแกรมผมชอบทำเป็น 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

บทความที่เกี่ยวข้องกัน: