ปิดฟอร์มที่เปิดค้างอยู่ ทุกฟอร์ม
กระทู้เก่าบอร์ด อ.Yeadram

 3,074   8
URL.หัวข้อ / URL
ปิดฟอร์มที่เปิดค้างอยู่ ทุกฟอร์ม

สวัสดีคะอาจารย์ทุกท่าน
รบกวนด้วยนะค่ะ มีคำถามจ้า
1) เวลาเปิดฟอร์ม บางครั้งจะมีฟอร์มเปิดค้างอยู่ถ้าไม่ได้ปิด
   เวลาจะปิดฟอร์มทีไม่ต้องการทำงานแล้ว ต้องไล่ปิดทีละฟอร์ม

สิ่งที่อยากได้จ้า
1) เป็นไปได้หรือเปล่าค่ะ เราจะซ่อนไว้ แต่ไม่ใช่การ ย่อไว้
    เพราะบางครั้งเราต้องการกลับแก้ไขข้อมูลที่ทำในฟอร์ม
    แรกก่อนหน้านี้จ้า ก็จะสามารถเรียกขึ้นมาใหม่อีกครั้ง
    โดยไม่ต้องไปคีย์ข้อมูลใหม่
2) อยากทราบว่า มีคำสั่งอะไรที่สามารถไล่ปิดฟอร์มเอง
   ทั้งหมด ทุกฟอร์มที่เปิดอยู่ และนะจ๊ะและจะยกเว้นสัก
   ฟอร์มได้หรือไม่ค่ะ ที่ไม่ต้องการให้ปิดจ้า
   รบกวนด้วยนะค่ะ

8 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R09136
ปิดฟอร์มทั้งหมด
Function clsform()
Dim I as integer
Dim frm as form
I = 0
For Each frm In Forms
DoCmd.Close acForm, frm.Name, acSaveYes
I = I + 1
Next
' MsgBox "Closed " & I & " Form(s)"
End Function

ถ้าอยากยกเว้นไม่ให้ปิดฟอร์มใดๆ ก็ใส่ if ... then แทรกเข้าไปในลูป for...next
เช่น if frm.name <> "FrmLogin" then docmd.close ...


สิ่งที่อยากได้ ข้อที่ 1 ผมไม่เข้าใจ ว่าจะทำอย่างนั้นทำไม?
- อยากปิดก็ปิด อยากเปิดก็สั่งเปิดใหม่ดีกว่า จะซ่อนทำไม อาจเกิดปัญหาล็อคเรคคอร์ดเปล่าๆ
- การเปิดฟอร์ม จะสั่งให้เปิดเรคคอร์ดเก่าทันที แล้วแก้ไขข้อมูลได้เลย หรือจะเปิดแบบให้ไปที่ new record มันขึ้นอยู่กับคำสั่งที่ใช้ในการเปิดมากกว่า มันไม่บังคับอยู่แล้ว
2 @R09139
ขอบคุณมากคะอาจารย์
เป็นพระคุณมากเลยคะ
3 @R09140
อาจารย์ค่ะ
ไม่ทราบว่าหนูทำอะไรผิดพลาดหรือเปล่าค่ะ
คือก็ยังต้องปิดทีละฟอร์มเหมือนเดิมคะ
รบกวนอาจารย์อีกครั้งจ้า
4 @R09142
แล้วผมจะรู้ด้วยไหมล่ะเนี่ย ว่าคุณทำอะไรผิดพลาดไปหรือเปล่า
มันเป็นอย่างไรล่ะครับ
คุณทำอะไร ทำอย่างไร ทำที่ไหน ในตอนไหน เหตุการณ์ไหน มีแจ้ง error ตอนไหนบ้าง แจ้งว่าอย่างไร

5 @R09143
จ้า ขอโทษนะค่ะ คือหนูลองเปิดฟอร์ม
ไว้ 2 ฟอร์มก็เลยสร้างปุ่ม
แล้ววางคำสั่งไว้ที่ Event on click
เข้าใจว่าพอคลิกที่ปุ่มฟอร์มที่เปิดไว้ก็น่าจะปิดหมด
ไม่ทราบว่าหนูเข้าใจถูกหรือเปล่าค่ะ
ส่วนฟ้อง error ไม่มีจ้า รบกวนจารย์ด้วยนะค่ะ

Private Sub Command2_Click()
   Dim I As Integer
   Dim frm As Form
   I = 0
   For Each frm In Forms
   DoCmd.Close acForm, frm.Name, acSaveYes
   I = I + 1
   Next
' MsgBox "Closed " & I & " Form(s)"
End Sub
6 @R09144
ลองใหม่อีกทีครับ
Private Sub Command2_Click()
   Dim i As Integer
   Dim frm As Form
   Dim ar()
   i = 0
   For Each frm In Forms
        ReDim Preserve ar(i)
        ar(i) = frm.Name
        i = i + 1
   Next
    For i = 0 To UBound(ar)
        If ar(i) <> Me.Name Then DoCmd.Close acForm, ar(i)
    Next
End Sub
7 @R09145
สว้สดีคะอาจารย์
ด้วยความความขอบนะค่ะ
ได้แล้วคะ.....ทุกฟอร์มที่เปิดอยู่จะปิดหมดจ้า
ยกเว้นถ้าทำปุ่มปิดที่ฟอร์มใด ฟอร์มนั้นจะไม่ปิดจ้า
แต่แก้ไขโดย วางคำสั่งไว้ที่ เหตุการณ์ on close แทนจ้า
และที่ปุ่มก็ใช้คำสั่ง Docmd.close แทนจ้า
ข้าน้อยนับถือ

ว่าแต่อาจารย์เป็นคนที่ไหนน้อ 555
8 @R09146
ขอแก้ความเข้าใจใหม่คะอาจารย์ข้าน้อยอ่อนหัดนัก

If ar(i) <> Me.Name Then DoCmd.Close acForm, ar(i)
ความหมายก็คือ ไม่ให้ปิดฟอร์มตัวเอง นอกนั้นให้ปิดหมดจ้า
ดังนั้นถ้าไม่อยากให้ปิดฟอร์มไหน
Me.Name ก็เปลี่ยนเป็นชื่อฟอร์มที่ไม่อยากให้ปิดนั้นเองจ้า
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3300s