กระทู้เก่าบอร์ด อ.Yeadram
2,911 22
URL.หัวข้อ /
URL
รบกวนดูโค้ด auto number หน่อยครับ
รบกวนสอบถามผู้รู้ และอาจารย์สันติสุขครับ
Option Compare Database
Option Explicit
Private Sub Form_Load()
End Sub
Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord , , acNewRec
End Sub
Private Sub Text3_AfterUpdate()
Dim strdate As String
Dim intNum As Integer, intMax As Integer
strdate = Format(Date, "yyyy-mm")
If DCount("[p_number]", "query1") = 0 Then
[p_number] = 1
Me.P_ID = strdate & "-" & Format([p_number], "000")
Else
[p_number] = DMax("[p_number]", "query1") + 1
Me.P_ID = strdate & "-" & Format([p_number], "000")
End If
SendKeys "{f9}", True
[¿ÍÃìÁÂèÍ tbl_PostData].Requery
End Sub
'Private p_number As String
Private Sub Command17_Click()
On Error GoTo Err_Command17_Click
DoCmd.GoToRecord , , acNewRec
Dim strdate As String
Dim intNum As Integer, intMax As Integer
strdate = Format(Date, "yyyy-mm")
If DCount("[p_number]", "query1") = 0 Then
[p_number] = 1
Me.P_ID = strdate & "-" & Format([p_number], "000")
Else
[p_number] = DMax("[p_number]", "query1") + 1
Me.P_ID = strdate & "-" & Format([p_number], "000")
End If
If Me.p_number >= 5 Then
Me.p_number = 1
End If
SendKeys "{f9}", True
[¿ÍÃìÁÂèÍ tbl_PostData].Requery
DoCmd.GoToControl "P_Name"
Exit_Command17_Click:
Exit Sub
Err_Command17_Click:
MsgBox Err.Description
Resume Exit_Command17_Click
End Sub
ผลลัพท์ที่ได้คือ ...
P_Date P_ID
31/10/2016 2016-10-001
31/10/2016 2016-10-002
31/10/2016 2016-10-003
31/10/2016 2016-10-004
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
รบกวนสอบถามครับ คำถามคือ ผมจะรันเลขท้ายโดยเมื่อถึงเลข 150 ให้นับ 1 ใหม่ ดังตัวอย่างด้านล่างนี้ครับ
P_Date P_ID
31/10/2016 2016-10-149
31/10/2016 2016-10-150
31/10/2016 2016-10-001
31/10/2016 2016-10-002
ต้องแก้ไขโค้ดตรงไหน อย่างไรบ้างครับ รบกวนด้วยนะครับทำมาเป็นอาทิตย์และคับไม่ได้สักทีอ่าคับ ขอบพระคุณมากครับผม
Option Compare Database
Option Explicit
Private Sub Form_Load()
End Sub
Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord , , acNewRec
End Sub
Private Sub Text3_AfterUpdate()
Dim strdate As String
Dim intNum As Integer, intMax As Integer
strdate = Format(Date, "yyyy-mm")
If DCount("[p_number]", "query1") = 0 Then
[p_number] = 1
Me.P_ID = strdate & "-" & Format([p_number], "000")
Else
[p_number] = DMax("[p_number]", "query1") + 1
Me.P_ID = strdate & "-" & Format([p_number], "000")
End If
SendKeys "{f9}", True
[¿ÍÃìÁÂèÍ tbl_PostData].Requery
End Sub
'Private p_number As String
Private Sub Command17_Click()
On Error GoTo Err_Command17_Click
DoCmd.GoToRecord , , acNewRec
Dim strdate As String
Dim intNum As Integer, intMax As Integer
strdate = Format(Date, "yyyy-mm")
If DCount("[p_number]", "query1") = 0 Then
[p_number] = 1
Me.P_ID = strdate & "-" & Format([p_number], "000")
Else
[p_number] = DMax("[p_number]", "query1") + 1
Me.P_ID = strdate & "-" & Format([p_number], "000")
End If
If Me.p_number >= 5 Then
Me.p_number = 1
End If
SendKeys "{f9}", True
[¿ÍÃìÁÂèÍ tbl_PostData].Requery
DoCmd.GoToControl "P_Name"
Exit_Command17_Click:
Exit Sub
Err_Command17_Click:
MsgBox Err.Description
Resume Exit_Command17_Click
End Sub
ผลลัพท์ที่ได้คือ ...
P_Date P_ID
31/10/2016 2016-10-001
31/10/2016 2016-10-002
31/10/2016 2016-10-003
31/10/2016 2016-10-004
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
31/10/2016 2016-10-005
รบกวนสอบถามครับ คำถามคือ ผมจะรันเลขท้ายโดยเมื่อถึงเลข 150 ให้นับ 1 ใหม่ ดังตัวอย่างด้านล่างนี้ครับ
P_Date P_ID
31/10/2016 2016-10-149
31/10/2016 2016-10-150
31/10/2016 2016-10-001
31/10/2016 2016-10-002
ต้องแก้ไขโค้ดตรงไหน อย่างไรบ้างครับ รบกวนด้วยนะครับทำมาเป็นอาทิตย์และคับไม่ได้สักทีอ่าคับ ขอบพระคุณมากครับผม
22 Reply in this Topic. Dispaly 2 pages and you are on page number 1
2 @R22656
ถามเพิ่มเติม
1. ทำไมถึงต้องออกแบบให้วิ่งตัวเลขถึงแค่ 150 จะวิ่งต่อไปเรื่อยๆไม่ได้หรือ ? จุดประสงค์ของ P_ID คืออะไร ?
2. ถ้า P_Date เริ่มวันใหม่ P_ID จะเริ่มจาก 001 ใหม่หรือไม่ ?
3. เดือน/ปีใน P_Date จะเท่ากับ ปี-เดือนใน P_ID เสมอหรือไม่ ?
1. ทำไมถึงต้องออกแบบให้วิ่งตัวเลขถึงแค่ 150 จะวิ่งต่อไปเรื่อยๆไม่ได้หรือ ? จุดประสงค์ของ P_ID คืออะไร ?
2. ถ้า P_Date เริ่มวันใหม่ P_ID จะเริ่มจาก 001 ใหม่หรือไม่ ?
3. เดือน/ปีใน P_Date จะเท่ากับ ปี-เดือนใน P_ID เสมอหรือไม่ ?
3 @R22657
เรียน อาจารย์สันติสุขที่เคารพครับ
จากโค้ดดังกล่าว ผม Copy มาจากเว็บนอกแล้วนำมาดัดแปลงครับ ซึ่งโค้ดดังกล่าว คือ การจัดเก็บเอกสารสำคัญลงกล่อง โดยกำหนดให้ใน 1 กล่อง เก็บเอกสารได้จำนวน 150 ชิ้น ครับผม ส่วนคำถามผมจะตอบในข้อความสีแดงครับผม
ถามเพิ่มเติม
1. ทำไมถึงต้องออกแบบให้วิ่งตัวเลขถึงแค่ 150 จะวิ่งต่อไปเรื่อยๆไม่ได้หรือ ? จุดประสงค์ของ P_ID คืออะไร ?
ผมเก็บเอกสารสำคัญไว้ในกล่อง โดยให้แต่ละกล่องมีจำนวนเอกสารต่อกล่อง 150 ชิ้น ครับ อาจารย์เลยต้องกำหนดไว้แค่เลข 150 ครับผม พอถึงเลข 150 ก็ให้รันเลข 1 ใหม่ครับ ส่วนเลข 10 คือเลขที่กล่องครับ เช่น 2016-10-150 คือ ปี 2016 กล่องที่ 10 ลำดับที่ 10 ครับผม จริงๆ แล้วผม อยากให้พอถึง เลข 150 แล้ว นับ 1 ใหม่ โดยให้ขึ้นกล่องใหม่ เช่น
2016-10-150
2016-11-001
2016-11-002 ครับ แต่ผมรันแบบนั้นไม่เป็นครับอาจารย์
2. ถ้า P_Date เริ่มวันใหม่ P_ID จะเริ่มจาก 001 ใหม่หรือไม่ ?
ส่วน P_Date คือ วันที่บันทึกข้อมูลในระบบครับผม ซึ่งตรงนี้ผมให้ผู้ใช้งานคีย์ข้อมูลวันที่เองครับ ส่วน P_ID จะเริ่มจะ 001 ไปเรื่อยๆจนถึง 150 ครับผม พอถึง 150 ก็ให้นับ 001 ใหม่ครับ เนื่องจากใน 1 กล่องผมกำหนดให้บรรจุเอกสาร 150 ชิ้น ต่อกล่องเท่านั้นครับผม
3. เดือน/ปีใน P_Date จะเท่ากับ ปี-เดือนใน P_ID เสมอหรือไม่ ?
ใช่ครับอาจารย์
โค้ดทั้งหมดที่ได้สอบถามมาผมไม่ค่อยจะเข้าใจสักเท่าไหร่ครับ เพราะผมเพิ่งหัดใช้ Access ครับ จึงเรียนสอบถามอาจาย์ดังที่กล่าวมาข้างต้น หากตรงไหนต้องแก้ไข ลบ หรือเพิ่มเติม รบกวนอาจาย์แนะนำด้วยครับผม
ด้วยความเคารพอย่างสูงครับ
จากโค้ดดังกล่าว ผม Copy มาจากเว็บนอกแล้วนำมาดัดแปลงครับ ซึ่งโค้ดดังกล่าว คือ การจัดเก็บเอกสารสำคัญลงกล่อง โดยกำหนดให้ใน 1 กล่อง เก็บเอกสารได้จำนวน 150 ชิ้น ครับผม ส่วนคำถามผมจะตอบในข้อความสีแดงครับผม
ถามเพิ่มเติม
1. ทำไมถึงต้องออกแบบให้วิ่งตัวเลขถึงแค่ 150 จะวิ่งต่อไปเรื่อยๆไม่ได้หรือ ? จุดประสงค์ของ P_ID คืออะไร ?
ผมเก็บเอกสารสำคัญไว้ในกล่อง โดยให้แต่ละกล่องมีจำนวนเอกสารต่อกล่อง 150 ชิ้น ครับ อาจารย์เลยต้องกำหนดไว้แค่เลข 150 ครับผม พอถึงเลข 150 ก็ให้รันเลข 1 ใหม่ครับ ส่วนเลข 10 คือเลขที่กล่องครับ เช่น 2016-10-150 คือ ปี 2016 กล่องที่ 10 ลำดับที่ 10 ครับผม จริงๆ แล้วผม อยากให้พอถึง เลข 150 แล้ว นับ 1 ใหม่ โดยให้ขึ้นกล่องใหม่ เช่น
2016-10-150
2016-11-001
2016-11-002 ครับ แต่ผมรันแบบนั้นไม่เป็นครับอาจารย์
2. ถ้า P_Date เริ่มวันใหม่ P_ID จะเริ่มจาก 001 ใหม่หรือไม่ ?
ส่วน P_Date คือ วันที่บันทึกข้อมูลในระบบครับผม ซึ่งตรงนี้ผมให้ผู้ใช้งานคีย์ข้อมูลวันที่เองครับ ส่วน P_ID จะเริ่มจะ 001 ไปเรื่อยๆจนถึง 150 ครับผม พอถึง 150 ก็ให้นับ 001 ใหม่ครับ เนื่องจากใน 1 กล่องผมกำหนดให้บรรจุเอกสาร 150 ชิ้น ต่อกล่องเท่านั้นครับผม
3. เดือน/ปีใน P_Date จะเท่ากับ ปี-เดือนใน P_ID เสมอหรือไม่ ?
ใช่ครับอาจารย์
โค้ดทั้งหมดที่ได้สอบถามมาผมไม่ค่อยจะเข้าใจสักเท่าไหร่ครับ เพราะผมเพิ่งหัดใช้ Access ครับ จึงเรียนสอบถามอาจาย์ดังที่กล่าวมาข้างต้น หากตรงไหนต้องแก้ไข ลบ หรือเพิ่มเติม รบกวนอาจาย์แนะนำด้วยครับผม
ด้วยความเคารพอย่างสูงครับ
4 @R22658
ขอแก้ไขข้อนี้ครับ พิมผิดไปนิดนึงครับผม
1. ทำไมถึงต้องออกแบบให้วิ่งตัวเลขถึงแค่ 150 จะวิ่งต่อไปเรื่อยๆไม่ได้หรือ ? จุดประสงค์ของ P_ID คืออะไร ?
ผมเก็บเอกสารสำคัญไว้ในกล่อง โดยให้แต่ละกล่องมีจำนวนเอกสารต่อกล่อง 150 ชิ้น ครับ อาจารย์เลยต้องกำหนดไว้แค่เลข 150 ครับผม พอถึงเลข 150 ก็ให้รันเลข 1 ใหม่ครับ ส่วนเลข 10 คือเลขที่กล่องครับ เช่น
2016-10-150
หมายความว่า ปี 2016 กล่องที่ 10 ลำดับที่ 150 ครับผม
จริงๆ แล้วผม อยากให้พอถึง เลข 150 แล้ว นับ 1 ใหม่ โดยให้ขึ้นกล่องใหม่ เช่น
2016-10-149
2016-10-150
2016-11-001
2016-11-002 ครับ
แต่ผมรันแบบนั้นไม่เป็นครับอาจารย์
1. ทำไมถึงต้องออกแบบให้วิ่งตัวเลขถึงแค่ 150 จะวิ่งต่อไปเรื่อยๆไม่ได้หรือ ? จุดประสงค์ของ P_ID คืออะไร ?
ผมเก็บเอกสารสำคัญไว้ในกล่อง โดยให้แต่ละกล่องมีจำนวนเอกสารต่อกล่อง 150 ชิ้น ครับ อาจารย์เลยต้องกำหนดไว้แค่เลข 150 ครับผม พอถึงเลข 150 ก็ให้รันเลข 1 ใหม่ครับ ส่วนเลข 10 คือเลขที่กล่องครับ เช่น
2016-10-150
หมายความว่า ปี 2016 กล่องที่ 10 ลำดับที่ 150 ครับผม
จริงๆ แล้วผม อยากให้พอถึง เลข 150 แล้ว นับ 1 ใหม่ โดยให้ขึ้นกล่องใหม่ เช่น
2016-10-149
2016-10-150
2016-11-001
2016-11-002 ครับ
แต่ผมรันแบบนั้นไม่เป็นครับอาจารย์
5 @R22659
ผมอยู่ข้างนอก ไม่สะดวกเขียนโค้ดบนมือถือ ไว้ค่ำๆจะเขียนให้ดู ถามอีกหน่อยครับ ถ้าเขียนให้สร้าง PID ขึ้นกับเดือน/ปีปัจจุบัน แต่ถ้าเกิน 150 จะใช้เลขลำดับถัดไปของเดือน/ปีถัดไปแทนตามที่คุณบอก อย่างนี้โอเคไหมครับ
และจะให้สร้างเลขนี้ตอนไหนครับ เป็นตอนที่คลิก command17 ดีไหม ?
และจะให้สร้างเลขนี้ตอนไหนครับ เป็นตอนที่คลิก command17 ดีไหม ?
6 @R22660
เรียน อาจารย์สันติสุขที่เคารพครับ
ถ้าเขียนให้สร้าง PID ขึ้นกับเดือน/ปีปัจจุบัน แต่ถ้าเกิน 150 จะใช้เลขลำดับถัดไปของเดือน/ปีถัดไปแทนตามที่คุณบอก อย่างนี้โอเคไหมครับ
ตอบครับ ถ้าเขียนให้สร้าง PID ขึ้นกับเดือน/ปีปัจจุบัน - ได้ครับอาจาย์สันติสุข ทั้งนี้โค้ดข้างต้นที่เรียนมาผมก๊อปแล้วมาดัดแปลงครับ หากอาจาย์เห็นว่ามีวิธีอื่นหรือโค้ดตัวอื่นที่ดีกว่าหรือง่ายกว่าก็ได้ครับ ส่วนการรันลำดับอยากให้เริ่มที่ 001 ไปเรื่อยๆ โดยถ้าเกิน 150 จะให้นับ เลข 001 ใหม่ ทั้งนี้เมื่อนับเลขใหม่ ก็ให้กล่อง ขึ้นลำดับใหม่ด้วยครับ เช่น
ปี กล่องที่ ลำดับที่
2016- 10- 149
2016- 10- 150
2016- 11- 001
2016- 11- 002
2016- 11- 003
และจะให้สร้างเลขนี้ตอนไหนครับ เป็นตอนที่คลิก command17 ดีไหม ?
ตอบครับ ได้ครับอาจารย์สันติสุข
ขอบพระคุณมากครับอาจาย์สันติสุข
ด้วยความเคารพอย่างสูงครับ
ถ้าเขียนให้สร้าง PID ขึ้นกับเดือน/ปีปัจจุบัน แต่ถ้าเกิน 150 จะใช้เลขลำดับถัดไปของเดือน/ปีถัดไปแทนตามที่คุณบอก อย่างนี้โอเคไหมครับ
ตอบครับ ถ้าเขียนให้สร้าง PID ขึ้นกับเดือน/ปีปัจจุบัน - ได้ครับอาจาย์สันติสุข ทั้งนี้โค้ดข้างต้นที่เรียนมาผมก๊อปแล้วมาดัดแปลงครับ หากอาจาย์เห็นว่ามีวิธีอื่นหรือโค้ดตัวอื่นที่ดีกว่าหรือง่ายกว่าก็ได้ครับ ส่วนการรันลำดับอยากให้เริ่มที่ 001 ไปเรื่อยๆ โดยถ้าเกิน 150 จะให้นับ เลข 001 ใหม่ ทั้งนี้เมื่อนับเลขใหม่ ก็ให้กล่อง ขึ้นลำดับใหม่ด้วยครับ เช่น
ปี กล่องที่ ลำดับที่
2016- 10- 149
2016- 10- 150
2016- 11- 001
2016- 11- 002
2016- 11- 003
และจะให้สร้างเลขนี้ตอนไหนครับ เป็นตอนที่คลิก command17 ดีไหม ?
ตอบครับ ได้ครับอาจารย์สันติสุข
ขอบพระคุณมากครับอาจาย์สันติสุข
ด้วยความเคารพอย่างสูงครับ
7 @R22661
ลองพิจารณาดูน่าจะเป็นว่าเลขกล่องไม่ได้ขึ้นกับเดือนเลย แต่ขึ้นกับปีเท่านั้น เช่นเดือน 12 แต่กล่องจะวิ่งไปถึง 40 กล่องก็ได้ โค้ดที่ผมให้ไปก็จะเป็นอย่างนี้
(ตรงส่วนที่เป็น ?? ให้คุณไปเปลี่ยนเป็นชื่อฟอร์มของคุณเองนะครับ และส่วนที่อ่านจาก query1 ผมก็เปลี่ยนให้อ่านจากเทเบิลโดยตรง ดังนั้นตรง "ชื่อเทเบิล" ก็เปลี่ยนให้ถูกต้องด้วยครับ)
(ตรงส่วนที่เป็น ?? ให้คุณไปเปลี่ยนเป็นชื่อฟอร์มของคุณเองนะครับ และส่วนที่อ่านจาก query1 ผมก็เปลี่ยนให้อ่านจากเทเบิลโดยตรง ดังนั้นตรง "ชื่อเทเบิล" ก็เปลี่ยนให้ถูกต้องด้วยครับ)
Private Sub Command17_Click()
Dim CurrYear As String
Dim Where As String
Dim LastDocID As String
Dim NewDocID As String
Dim CurrBoxNo As String
Dim NextBoxNo As String
Dim NextRunNo As String
On Error GoTo Err_Command17_Click
DoCmd.GoToRecord , , acNewRec
CurrYear = Year(Date)
Where = "P_ID like '" + CurrYear + "*'"
LastDocID = Nz(DMax("P_ID", "ชื่อเทเบิล", Where), "")
' ถ้าในปีนั้นยังไม่ได้มีการรันเลขอะไรเลย ก็จะเป็นใบแรกของกล่องแรกของปี
If LastDocID = "" Then
NewDocID = CurrYear + "-01-001"
' ถ้าเป็นเลข 150 ของกล่อง ก็ให้เปลี่ยนเป็นใบแรกของกล่องเลขถัดไป
ElseIf Right$(LastDocID, 3) >= "150" Then
NextBoxNo = Format$(Val(Mid$(LastDocID, 6, 2)) + 1, "00")
NewDocID = CurrYear + "-" + NextBoxNo + "-001"
' ถ้ากล่องเดิมยังไม่เต็ม ก็เปลี่ยนเฉพาะเลขรันเอกสารเป็นเลขถัดไปเท่านั้น
Else
CurrBoxNo = Mid$(LastDocID, 6, 2)
NextRunNo = Format$(Val(Right$(LastDocID, 3)) + 1, "000")
NewDocID = CurrYear + "-" + CurrBoxNo + "-" + NextRunNo
End If
Me.P_ID = NewDocID
SendKeys "{f9}", True
[??].Requery
DoCmd.GoToControl "P_Name"
Exit_Command17_Click:
Exit Sub
Err_Command17_Click:
MsgBox Err.Description
Resume Exit_Command17_Click
End Sub
8 @R22662
ขอบพระคุณมากครับอาจารย์สันติสุขที่ช่วยชีวิตผมไว้ครับ
9 @R22663
เรียน อาจารย์สันติสุขที่เคารพครับ
อาจารย์สันติสุขครับ พอรันถึงเลข 150 แล้ว ระบบก็รันต่อไป 151,152,153 และทุกครั้งที่กดปุ่มขึ้น error แบบนี้ครับ
microsoft access can't find the field 'l1' referred to in your expression
รบกวนอาจารย์อีกครั้งครับผม ขอบคุณมากครับ
อาจารย์สันติสุขครับ พอรันถึงเลข 150 แล้ว ระบบก็รันต่อไป 151,152,153 และทุกครั้งที่กดปุ่มขึ้น error แบบนี้ครับ
microsoft access can't find the field 'l1' referred to in your expression
รบกวนอาจารย์อีกครั้งครับผม ขอบคุณมากครับ
10 @R22664
ก่อนจะทำค่าด้านล่าง ต้องทำเป็น string ก่อนหรือเปล่าครับอาจารย์ครับ
' ถ้าเป็นเลข 150 ของกล่อง ก็ให้เปลี่ยนเป็นใบแรกของกล่องเลขถัดไป
ElseIf Right$(LastDocID, 3) >= "150" Then
' ถ้าเป็นเลข 150 ของกล่อง ก็ให้เปลี่ยนเป็นใบแรกของกล่องเลขถัดไป
ElseIf Right$(LastDocID, 3) >= "150" Then
11 @R22665
เอาโค้ดที่คุณแก้ไขจากที่ผมบอกแล้ว เอามาแปะให้ดูหน่อยครับ
12 @R22666
เรียน อาจารย์สันติสุขที่เคารพครับ
โค้ดทั้งหมดครับ
Option Compare Database
Option Explicit
Private Sub Command17_Click()
Dim CurrYear As String
Dim Where As String
Dim LastDocID As String
Dim NewDocID As String
Dim CurrBoxNo As String
Dim NextBoxNo As String
Dim NextRunNo As String
On Error GoTo Err_Command17_Click
DoCmd.GoToRecord , , acNewRec
CurrYear = Year(Date)
Where = "P_ID like '" + CurrYear + "*'"
LastDocID = Nz(DMax("P_ID", "tbl_PostData", Where), "")
' ถ้าในปีนั้นยังไม่ได้มีการรันเลขอะไรเลย ก็จะเป็นใบแรกของกล่องแรกของปี
If LastDocID = "" Then
NewDocID = CurrYear + "-01-001"
' ถ้าเป็นเลข 150 ของกล่อง ก็ให้เปลี่ยนเป็นใบแรกของกล่องเลขถัดไป
ElseIf Right$(LastDocID, 3) >= "5" Then
NextBoxNo = Format$(Val(Mid$(LastDocID, 6, 2)) + 1, "00")
NewDocID = CurrYear + "-" + NextBoxNo + "-001"
' ถ้ากล่องเดิมยังไม่เต็ม ก็เปลี่ยนเฉพาะเลขรันเอกสารเป็นเลขถัดไปเท่านั้น
Else
CurrBoxNo = Mid$(LastDocID, 6, 2)
NextRunNo = Format$(Val(Right$(LastDocID, 3)) + 1, "000")
NewDocID = CurrYear + "-" + CurrBoxNo + "-" + NextRunNo
End If
Me.P_ID = NewDocID
SendKeys "{f9}", True
[frm_TestAutonumber].Requery
DoCmd.GoToControl "P_Name"
Exit_Command17_Click:
Exit Sub
Err_Command17_Click:
MsgBox Err.Description
Resume Exit_Command17_Click
End Sub
โดยตารางเทเบิล tbl_PostData รายละเอียดดังนี้ครับ
Field Name Data Type
P_Date Date/Time
P_ID Text
P_Name Text
P_Addres Text
P_Phone Text
p_number Number
ซึ่งพอรันถึงเลข 150 แล้ว ระบบก็รันต่อไป 151,152,153 และทุกครั้งที่กดปุ่มขึ้น error แบบนี้ครับ
microsoft access can't find the field 'l1' referred to in your expression
รบกวนอาจารย์ตรวจสอบดูให้หน่อยครับผม ขอบพระคุณมากครับอาจารย์
ด้วยความเคารพอย่างสูง
โค้ดทั้งหมดครับ
Option Compare Database
Option Explicit
Private Sub Command17_Click()
Dim CurrYear As String
Dim Where As String
Dim LastDocID As String
Dim NewDocID As String
Dim CurrBoxNo As String
Dim NextBoxNo As String
Dim NextRunNo As String
On Error GoTo Err_Command17_Click
DoCmd.GoToRecord , , acNewRec
CurrYear = Year(Date)
Where = "P_ID like '" + CurrYear + "*'"
LastDocID = Nz(DMax("P_ID", "tbl_PostData", Where), "")
' ถ้าในปีนั้นยังไม่ได้มีการรันเลขอะไรเลย ก็จะเป็นใบแรกของกล่องแรกของปี
If LastDocID = "" Then
NewDocID = CurrYear + "-01-001"
' ถ้าเป็นเลข 150 ของกล่อง ก็ให้เปลี่ยนเป็นใบแรกของกล่องเลขถัดไป
ElseIf Right$(LastDocID, 3) >= "5" Then
NextBoxNo = Format$(Val(Mid$(LastDocID, 6, 2)) + 1, "00")
NewDocID = CurrYear + "-" + NextBoxNo + "-001"
' ถ้ากล่องเดิมยังไม่เต็ม ก็เปลี่ยนเฉพาะเลขรันเอกสารเป็นเลขถัดไปเท่านั้น
Else
CurrBoxNo = Mid$(LastDocID, 6, 2)
NextRunNo = Format$(Val(Right$(LastDocID, 3)) + 1, "000")
NewDocID = CurrYear + "-" + CurrBoxNo + "-" + NextRunNo
End If
Me.P_ID = NewDocID
SendKeys "{f9}", True
[frm_TestAutonumber].Requery
DoCmd.GoToControl "P_Name"
Exit_Command17_Click:
Exit Sub
Err_Command17_Click:
MsgBox Err.Description
Resume Exit_Command17_Click
End Sub
โดยตารางเทเบิล tbl_PostData รายละเอียดดังนี้ครับ
Field Name Data Type
P_Date Date/Time
P_ID Text
P_Name Text
P_Addres Text
P_Phone Text
p_number Number
ซึ่งพอรันถึงเลข 150 แล้ว ระบบก็รันต่อไป 151,152,153 และทุกครั้งที่กดปุ่มขึ้น error แบบนี้ครับ
microsoft access can't find the field 'l1' referred to in your expression
รบกวนอาจารย์ตรวจสอบดูให้หน่อยครับผม ขอบพระคุณมากครับอาจารย์
ด้วยความเคารพอย่างสูง
13 @R22667
ElseIf Right$(LastDocID, 3) >= "5"
ทำไมของคุณเป็น 5 หล่ะ ต้อง 150 สิครับ
ทำไมของคุณเป็น 5 หล่ะ ต้อง 150 สิครับ
14 @R22668
อ่อ ขอบคุณครับอาจารย์ พิมพ์ตกไปตัวนึงครับ แต่ก็ยังรันเหมือนเดิมนะครับอาจาย์
15 @R22669
ได้และครับ อาจารย์ ขอบพระคุณมากๆครับผม ติดอย่างเดียวเวลากดปุ่มมันขึ้น microsoft access can't find the field 'l1' referred to in your expression เป็นเพราะอะไรหรอครับผม
16 @R22672
โค้ดนี้ได้ดัก error เอาไว้แล้ว ถ้าเกิด error เมื่อไหร่ก็จะกระโดดมาที่บรรทัด MsgBox Err.Description และจะออกจากโค้ดนี้ไป ส่วนอื่นๆในโค้ดนี้จะไม่ถูกทำงาน เลขก็จะสร้างออกมาไม่ได้ น่าจะผิดที่ส่วนอื่นของโปรแกรมคุณมากกว่า
17 @R22673
ลองแก้ที่บรทัด [frm_TestAutonumber].Requery ให้เป็น Forms("frm_TestAutonumber").Requery แทนครับ
แล้วก็เท็กซ์บ็อกซ์ที่ชื่อ P_Name มีอยู่บนฟอร์มจริงหรือไม่ คุณอาจจะผูกเท็กซ์บ็อกซ์กับฟิลด์ P_Name ก็จริง แต่ตัวเท็กซ์บ็อกซ์อาจจใช้ชื่ออื่น ถ้าเป็นชื่ออื่นก็ให้แก้ที่บรรทัด DoCmd.GoToControl "P_Name" ให้ถูกต้องด้วย
แล้วก็เท็กซ์บ็อกซ์ที่ชื่อ P_Name มีอยู่บนฟอร์มจริงหรือไม่ คุณอาจจะผูกเท็กซ์บ็อกซ์กับฟิลด์ P_Name ก็จริง แต่ตัวเท็กซ์บ็อกซ์อาจจใช้ชื่ออื่น ถ้าเป็นชื่ออื่นก็ให้แก้ที่บรรทัด DoCmd.GoToControl "P_Name" ให้ถูกต้องด้วย
18 @R22674
ขอบพระคุณมากครับอาจาย์สันติสุขครับผม
19 @R22675
เวลากดปุ่มมันขึ้น microsoft access can't find the field 'l1' referred to in your expression หาไป๊ (l) ไม่เจออะครับอาจารย์ - -*
20 @R22676
หากระทู้เก่าๆเรื่องการทำดีบักนะครับ จะได้หาว่ามีปัญหาที่บรรทัดไหน
Time: 0.2723s
แล้วทำไมต้องมีทั้ง Text3_AfterUpdate และ Command17 ด้วย ?