กระทู้เก่าบอร์ด อ.Yeadram
        
           3,545   20		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        ถามเรื่อง MsgBox ให้แจ้งเตือนครับ      
    
      คือผมมี MainForm ชื่อ FmOrder_Out_All
และ SubForm ชื่อ FsOrderDetail_Out_All (อยู่ในส่วนรายละเอียดของMainForm)
ส่วนMainForm มีไว้ใส่รายละเอียดและเชื่อกับSubForm
-ส่วนที่จะถามอยู่ใน SubForm คือ เมื่อมีการกดรหัสสินค้าใดๆเข้าไปแล้ว ก็ให้ทำงานต่อไปคือปรกติมันจะไปFocusที่ จำนวนอยู่แล้ว
-แต่ทีนี้ผมอยากให้มันเตือนว่า ถ้าProductID(เป็นComboอยู่ส่วนรายละเอียดอยู่ที่SubForm) ไม่มี, ไม่ได้ใส่ หรือประมาณว่า น้อยกว่า0 ก็ให้มันยังคงFocusอยู่ที่เดิม และขึ้นMsgBox เตือนว่า "กรุณาใส่รหัสสินค้า" และเมื่อใส่รหัสแล้วก็ทำงานปรกติต่อไป ไม่ทราบว่าต้องเขียนโค๊ตอย่างไรครับผม
    
  และ 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 
				
        
    2 @R03668    
        
  
      แหะๆ
ไม่ได้อ่ะครับ
แต่จะลองดู
ขอบคณครับ
    
  ไม่ได้อ่ะครับ
แต่จะลองดู
ขอบคณครับ
        
    3 @R03674    
        
  
      สร้างเหตุการณ์ on Exit ของ ProductID 
เขียน Code ดังนี้
If Isnull(ProductID)=True or Product="" then
Msgbox "xxx"
ProductID.Setfocus
Exit Sub
End if
 
    
    
  เขียน 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
    
  Private sub cbProductID_BeforeUpdate(cancel as integer)
cancel = (isnull(cbProductID) or cbProduct="")
End sub
        
    7 @R03683    
        
  
      ครับ อาจารย์ จะลองพยายามดูครับ    
    
  
        
    8 @R03684    
        
  
      คือมันเป็นแบบนี้ครับ อาจารย์ Yeadram 
ใช้กับTextBoxได้เมื่อคลิ๊กด้วยเม้าส์ครับ แต่เวลาลงรหัสสินค้าจะใช้วิธีกดรหัสแล้วไปที่จำนวนแล้วคำนวณเอง แล้วจะไปอีกบรรทัดต่อไปที่ฟิล์ดรหัสสินค้า วนไปแบบนี้อ่ะครับ เลยไม่ได้ใช้เม้าส์คลิ๊ก เลยไม่เห็นผล ยังไงก็จะลองดูใหม่นะครับ ขอบคุณครับ
    
  ใช้กับTextBoxได้เมื่อคลิ๊กด้วยเม้าส์ครับ แต่เวลาลงรหัสสินค้าจะใช้วิธีกดรหัสแล้วไปที่จำนวนแล้วคำนวณเอง แล้วจะไปอีกบรรทัดต่อไปที่ฟิล์ดรหัสสินค้า วนไปแบบนี้อ่ะครับ เลยไม่ได้ใช้เม้าส์คลิ๊ก เลยไม่เห็นผล ยังไงก็จะลองดูใหม่นะครับ ขอบคุณครับ
        
    9 @R03702    
        
  
      รายงานผล
ได้แล้วครับผม ผมใช้แบบนี้ก่อนไปก่อนครับ
Private Sub ProductID_Exit(Cancel As Integer)
Cancel = (IsNull(ProductID) Or ProductID = "")
End Sub
มันจะอยู่ที่เดิมครับ เลยเอาไปใช้กับ EmployeeID กับ PersonID ด้วยเลย :-)
    
  ได้แล้วครับผม ผมใช้แบบนี้ก่อนไปก่อนครับ
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
    
  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 ไม่ต้องใส่ก็ได้ครับ มันจบงานแล้วนะนั่น
    
  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
    
  
  แหะๆ
แค่นี้พอมั๊งครับ
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
    
  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
ถ้าใช้แบบนี้ มันไม่มีปัญหาครับ
    
  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
ใช่แบบนี้หรือเปล่าครับ ลองดู
    
  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
ถ้าเป้นแบบนี้จะต้องแก้โค๊ตแบบไหนครับอาจารย์
ขอโทษครับ ผมมือใหม่ไล่ไม่ค่อยถูกจริงๆครับ แต่พยายามอยู่ครับ แหะๆ
ขอบคุณอาจารย์ที่สละเวลาครับ
    
  แต่เวลาไปฟอร์มใหม่ หรือ 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
สองคำสั่งที่ผม คอมเม้นต์เอาไว้ ให้ลองเลือกมาใช้ซักอันหนึ่ง ให้มันเหมาะกับงาน กับเหตุการณ์ที่คุณฝังโค้ด เลือกใช้แค่อันเดียวครับ
ลองดูว่าอะไรใช้ได้ (มันขึ้นอยู่กับลำดับงาน และเหตุการณ์ที่ฝังโค้ด)
    
    
  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ยังไม่ถูกลบไปครับ
แต่เดี๋ยวผมจะลองอีกเรื่อยๆครับ
ขอบคุณครับผม
    
  เปิดใช้ 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
แต่มันก็ยังฟ้องอยุ่ครับ
    
  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
แต่มันก็ยังฟ้องอยุ่ครับ
      Time: 0.4185s
    
      
		
cancel = isnull(cbProductID)
End sub