ถามเรื่อง MsgBox ให้แจ้งเตือนครับ
กระทู้เก่าบอร์ด อ.Yeadram

 3,391   20
URL.หัวข้อ / URL
ถามเรื่อง MsgBox ให้แจ้งเตือนครับ

คือผมมี MainForm ชื่อ FmOrder_Out_All
และ SubForm ชื่อ FsOrderDetail_Out_All (อยู่ในส่วนรายละเอียดของMainForm)

ส่วนMainForm มีไว้ใส่รายละเอียดและเชื่อกับSubForm

-ส่วนที่จะถามอยู่ใน SubForm คือ เมื่อมีการกดรหัสสินค้าใดๆเข้าไปแล้ว ก็ให้ทำงานต่อไปคือปรกติมันจะไปFocusที่ จำนวนอยู่แล้ว
-แต่ทีนี้ผมอยากให้มันเตือนว่า ถ้าProductID(เป็นComboอยู่ส่วนรายละเอียดอยู่ที่SubForm) ไม่มี, ไม่ได้ใส่ หรือประมาณว่า น้อยกว่า0 ก็ให้มันยังคงFocusอยู่ที่เดิม และขึ้นMsgBox เตือนว่า "กรุณาใส่รหัสสินค้า" และเมื่อใส่รหัสแล้วก็ทำงานปรกติต่อไป ไม่ทราบว่าต้องเขียนโค๊ตอย่างไรครับผม

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

1 @R03663
Private sub cbProductID_BeforeUpdate(cancel as integer)
cancel = isnull(cbProductID)
End sub
2 @R03668
แหะๆ
ไม่ได้อ่ะครับ
แต่จะลองดู
ขอบคณครับ
3 @R03674
สร้างเหตุการณ์ on Exit ของ ProductID
เขียน Code ดังนี้

If Isnull(ProductID)=True or Product="" then
Msgbox "xxx"
ProductID.Setfocus
Exit Sub
End if

4 @R03675
ผิดนิดหน่อย แก้ Code ตรง Product="" เป็น ProductID="" ครับ
5 @R03678
ขอบพระคุณอย่างสูงครับพี่Nova ใกล้เคียงแล้วครับ พอไม่มีการลงรหัสปุ๊บ มันขึ้นข้อความเตือนทันทีเลย แต่มันยังไม่กลับไปSetFocusที่ ฟิล์ด ProductIDเลยครับ
6 @R03680
ประยุกต์ อย่าก็อป!

Private sub cbProductID_BeforeUpdate(cancel as integer)
cancel = (isnull(cbProductID) or cbProduct="")
End sub
7 @R03683
ครับ อาจารย์ จะลองพยายามดูครับ
8 @R03684
คือมันเป็นแบบนี้ครับ อาจารย์ Yeadram
ใช้กับTextBoxได้เมื่อคลิ๊กด้วยเม้าส์ครับ แต่เวลาลงรหัสสินค้าจะใช้วิธีกดรหัสแล้วไปที่จำนวนแล้วคำนวณเอง แล้วจะไปอีกบรรทัดต่อไปที่ฟิล์ดรหัสสินค้า วนไปแบบนี้อ่ะครับ เลยไม่ได้ใช้เม้าส์คลิ๊ก เลยไม่เห็นผล ยังไงก็จะลองดูใหม่นะครับ ขอบคุณครับ
9 @R03702
รายงานผล
ได้แล้วครับผม ผมใช้แบบนี้ก่อนไปก่อนครับ

Private Sub ProductID_Exit(Cancel As Integer)
Cancel = (IsNull(ProductID) Or ProductID = "")
End Sub

มันจะอยู่ที่เดิมครับ เลยเอาไปใช้กับ EmployeeID กับ PersonID ด้วยเลย :-)
10 @R03924
ตอนนี้ใช้แบบนี้ครับ

Private Sub PersonID_Exit(Cancel As Integer)
If IsNull(PersonID) Or PersonID = "" Then
Cancel = (IsNull(ProductID) Or ProductID = "")
MsgBox "กรุณาใส่รหัสผู้ติดต่อ หรือ รหัสลูกค้า ( ลูกค้าทั่วไปคือรหัส xxx )"
Exit Sub
End If
End Sub
11 @R03925
อิอิ

Exit Sub
End If
End Sub

มันไม่มีคำสั่งต่อ ไม่มีเงื่อนไขต่อ Exit Sub ไม่ต้องใส่ก็ได้ครับ มันจบงานแล้วนะนั่น
12 @R03926

แหะๆ
แค่นี้พอมั๊งครับ

Private Sub ProductID_Exit(Cancel As Integer)
If IsNull(ProductID) Or ProductID = "" Then
Cancel = (IsNull(ProductID) Or ProductID = "")
MsgBox "กรุณาใส่รหัสผู้ติดต่อ หรือ รหัสลูกค้า"
End If
End Sub

ได้แค่นี้ก้ดีใจแย่แล้วครับผม อิอิ แต่มาแจ้งตามกติกาครับ

แต่ยังอยากได้แบบว่า ถ้ากดEnterแล้วไม่มีข้อมูล ให้วิ่งไปFocusที่ฟอร์มหลักเลย ยังทำไม่ได้เลยครับ :-P
13 @R03927
เวรกรรม ผมลงผิดครับ

Private Sub PersonID_Exit(Cancel As Integer)
If IsNull(PersonID) Or PersonID = "" Then
Cancel = (IsNull(PersonID) Or PersonID = "")
MsgBox "หรุณาใส่รหัสผู้ติดต่อ หรือ รหัสลูกค้า ( ลูกค้าทั่วไปคือรหัส 601 )"
End If
End Sub
14 @R03929
ผมลองแล้ว มันต้องเป็น

Private Sub ProductID_Exit(Cancel As Integer)
If IsNull(ProductID) Or ProductID = "" Then
Cancel = (IsNull(ProductID) Or ProductID = "")
MsgBox "กรุณาใส่รหัสผู้ติดต่อ หรือ รหัสลูกค้า"
Exit Sub
End If
End Sub

ถ้าใช้แบบนี้ มันไม่มีปัญหาครับ
15 @R03931
ถ้าไม่อยากให้มันอยู่กับที่ ต้องอย่าใช้ cancel ครับ คืออย่าขวางมัน

private sub ProductID_Afterupdate()
If IsNull(ProductID) Or ProductID = "" Then
MsgBox "กรุณาใส่รหัสผู้ติดต่อ หรือ รหัสลูกค้า"
on error resume next
Forms("ชื่อฟอร์มหลัก").controls("ชื่อคอนโทรล").setfocus
End If
End sub

ใช่แบบนี้หรือเปล่าครับ ลองดู
16 @R03948
ตอนนี้ใช้ได้ค่อนข้างตรงกับที่ต้องการแล้วครับ มันไปโฟกัสตามที่ต้องการเลยเพื่อให้ใส่รับเงินลูกค้าก่อนทอน

แต่เวลาไปฟอร์มใหม่ หรือ Esc มักจะขึ้น
กรุณาป้อนค่าลงในเขตข้อมูล TbOrderDetail.ProductID

ไม่รู้ว่าต้องแก้ไขต่อไปยังไงครับ ตอนนี้ใช้แบบนี้ครับ

Private Sub ProductID_Exit(Cancel As Integer)
If IsNull(ProductID) Or ProductID = "" Then
MsgBox "กรุณากลับไปใส่รหัสสินค้า หรือ รับเงินลูกค้าเพื่อทอนเงิน"
On Error Resume Next
Forms("FmOrder_Out_All").Controls("CashInAtPos").SetFocus
End If
End Sub

ตอนนี้เลยอยากให้เป็นว่า ถ้าฟิล์ด ProductIDในฟอร์มย่อย FsOrderDetail_Out_All ถ้าว่าง-> ให้ยกเลิกบรรทัดนี้(เป็นบรรทัดที่กดEnterตรงนี้โดยProductIDไม่ได้ใส่)-> แล้วจึงไปที่ฟิล์ด CashInAtPosในฟอร์มหลักFmOrder_Out_All

ถ้าเป้นแบบนี้จะต้องแก้โค๊ตแบบไหนครับอาจารย์
ขอโทษครับ ผมมือใหม่ไล่ไม่ค่อยถูกจริงๆครับ แต่พยายามอยู่ครับ แหะๆ
ขอบคุณอาจารย์ที่สละเวลาครับ
17 @R03949
ถ้าให้ตรงบรรทัดล่าสุด(ที่ไม่ได้ใส่รหัสสินค้า)นี้ ถ้าไม่มี ยกเลิก หรือเป็นDelete record นี้ไปเลยก้ได้ครับ
18 @R03950
ผมพาไปเหตุการณ์อื่นแล้วนะครับ

If IsNull(ProductID) Or ProductID = "" Then
' me.undo
' docmd.runcommand accmddeleterecord
MsgBox "กรุณากลับไปใส่รหัสสินค้า หรือ รับเงินลูกค้าเพื่อทอนเงิน"
On Error Resume Next
Forms("FmOrder_Out_All").Controls("CashInAtPos").SetFocus
End If

สองคำสั่งที่ผม คอมเม้นต์เอาไว้ ให้ลองเลือกมาใช้ซักอันหนึ่ง ให้มันเหมาะกับงาน กับเหตุการณ์ที่คุณฝังโค้ด เลือกใช้แค่อันเดียวครับ
ลองดูว่าอะไรใช้ได้ (มันขึ้นอยู่กับลำดับงาน และเหตุการณ์ที่ฝังโค้ด)
19 @R03951
นำไปใช้แล้วครับ
เปิดใช้ docmd.runcommand accmddeleterecord
แล้วขึ้น Run-time error '2046':
คำสั่งหรือแอคชั่น 'DeleteRecord' ยังใช้การไม่ได้ในขณะนี้
--------------------------------------------------------------------
เปิดใช้ me.Undo
แล้วอาการเหมือนการใช้โค๊ตก่อนหน้าครับ คือยังไม่Undoให้ แต่ไปFocusที่ตั้งไว้เลยครับ
ทำให้RecordในSubFormยังไม่ถูกลบไปครับ

แต่เดี๋ยวผมจะลองอีกเรื่อยๆครับ
ขอบคุณครับผม
20 @R03955
ตอนนี้ผมใช้แบบนี้ครับ
Private Sub ProductID_Exit(Cancel As Integer)
If IsNull(ProductID) Or ProductID = "" Then
Me.Undo
' docmd.runcommand accmddeleterecord
MsgBox "¡ÃسҡÅѺä»ãÊèÃËÑÊÊÔ¹¤éÒ"
On Error Resume Next
Forms("FmOrder_Out_All").Controls("CashInAtPos").SetFocus
End If
End Sub

โดยที่ว่า ไปตั้งค่าProductIDที่Tableว่า จำเป็น=ใช่

แต่มันจะฟ้องErrorว่า
กรุณาป้อนค่าลงในเขตข้อมูล TbOrderDetail.ProductID
แต่มันก็จะไม่บันทึกบรรทึกที่Productว่างลงไปในTable

จีงอยากให้มันปิดโดยไม่ฟ้องErrorจะต้องทำอย่างไรครับ เพราะตอนนี้ผมใช้
Private Sub Form_Close()
On Error Resume Next
End Sub
แต่มันก็ยังฟ้องอยุ่ครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2919s