สร้างปุ่มรัน Autonumber
กระทู้เก่าบอร์ด อ.Yeadram

 1,856   11
URL.หัวข้อ / URL
สร้างปุ่มรัน Autonumber

อยากสอบถามการสร้างปุ่มรันหมายเลขค่ะ
NAT000117 = NATคือค่าที่คงเดิม 0001คือ+1เรื่อยๆ 17คือปีคศ.

เรามีปุ่มที่เมื่อกดแล้ว จะให้ค่าไปใส่ในtextbox1
รบกวนหน่อยนะคะ

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

1 @R23534
ส่งไฟล์ให้ดูหน่อยได้หรือเปล่าครับ
Piyaphan@Se-ed.com
2 @R23539
Function AotoNo() As String
Dim x As Variant
Dim bk As String
    x = DMax("Left(QuotationID,4)", "Quotation_tbl", "Right(QuotationID,4) =" & Format(Now(), "mmyy"))
    x = DMax("Left(QuotationID,4)", "Quotation_tbl", "Right(QuotationID,4) =" & Format(Now(), "yy"))
                                                      
    If IsNull(x) Then bk = 1 Else bk = x + 1
    
    AotoNo = Format(bk, "0000") & "" & Format(Now(), "mmyy")
    Debug.Print "1"

End Function


ตอนนี้ทำได้แล้วค่ะ แต่ติดตรงตัวอักษร NAT ไม่รู้จะใส่ตรงไหนให้สอดคล้องกับDMax

ช่วยหน่อยนะคะ
3 @R23540
*****แก้ไข ส่งผิดค่ะ

Function AotoNo() As String
Dim x As Variant
Dim bk As String
    
    x = DMax("Left(QuotationID,4)", "Quotation_tbl", "Right(QuotationID,4) =" & Format(Now(), "yy"))
                                                       
    If IsNull(x) Then bk = 1 Else bk = x + 1
     
    AotoNo = Format(bk, "0000") & "" & Format(Now(), "yy")
    Debug.Print "1"

End Function
4 @R23541
ใส่หลังAutoNoหรือเปล่าครับ ลองดู
AotoNo = "NAT" & Format(bk, "0000") & "" & Format(Now(), "yy")
5 @R23542
ลองใส่แล้วค่ะ แต่รันได้ครั้งเดียว อีกครั้งErrorค่ะ TT
6 @R23543
ลองแก้ใหม่ดูครับ
ลบ
AotoNo = Format(bk, "0000") & "" & Format(Now(), "yy")

ใส่ใหม่
Me.Year = Format(Date, "yy")
AotoNo = "NAT" & Format(bk, "0000")& [Year]
7 @R23544
ขอโทษนะครับ ข้อมูลด้านบนผิดครับ

ตามนี้นะครับ
ต้องบังคับให้เปิดRecord ใหม่ด้วยครับ
DoCmd.GoToRecord , , acNewRec
......
.....
AotoNo = "NAT" & Format(bk, "0000") & "" & Format(Now(), "yy")

ถ้าไม่ได้อีกคงต้องวิธีนี่้ครับ
ในตารางสร้างฟิวด์3ฟิว
1.ฟิวด์ชื่อ bk กำหนดเป็น Number
2.ฟิวชื่อ Year กำหนดเป็น Date/Time
3.ชื่อฟิวด์ AotoNo กำหนดเป็น Text

ในฟอร์ม สร้างTextBox ทั้ง3ตัวตามด้านบน และสร้างปุ่มCommand ชื่อcmd1 ใส่โค้ดดังนี้ครับ
Public Sub cmd1_Click()
DoCmd.GoToRecord , , acNewRec
Me.Year = Format(Date, "yy")
AotoNo = "NAT" & Format(bk, "0000")& [Year]
End Sub
ลองปรับใช้ดูครับ
8 @R23547
คุณจะรันเลขที่ Quotation ใช่หรือไม่ ถ้าใช่
คุณจะรันในรูปแบบ NAT000117, NAT000217, NAT000317, ... ใช่หรือไม่ ถ้าใช่
ลองจินตนาการดูซิครับ ถ้าสมมติว่า คุณมีเลขที่เดิมในตาราง เขียนว่า NAT000117 เวลาจะหาเลขที่ล่าสุด คุณจะให้มันมองที่ตำแหน่งไหน มันไม่ใช่ Left() แน่ๆ

ที่คุณเขียนมา คือ "Left(QuotationID,4)"
ลองคิดดูใหม่ครับ

ตำแหน่งที่คุณจะนับ มันต้องข้ามอักขระ NAT ไปก่อนนะครับ นั้นคือให้มองข้ามไป 3 อักขระด้วยนะ
ควรจะเป็น Mid(QuotationID,4,4) หรือเปล่าครับ
9 @R23548
แต่ แนวคิดที่ให้ไปนั้น หมายถึงว่า มันต้องมีเลขที่เดิม ที่เคยมีรูปแบบนี้อยู่ก่อนแล้ว ในตารางนะ

ถ้าสมมติว่า โค้ดนี้ จะใช้เป็นครั้งแรก ทั้งๆ ที่ไม่มีข้อมูลเดิมอยู่เลยแม้แต่ เรคคอร์ดเดียว
มันอาจจะใช้ Mid() ไม่ได้ อันนี้ ก็ต้องคิดเพิ่มเอานะครับ

อาจต้องมีคำสั่งตรวจสอบเงื่อนไข ดักไว้ก่อน
If .... ถ้าไม่เคยมี เรคคอร์ด then
AotoNo = "NAT0001" & Format(Date(),"YY")
else
x = Dmax(.....
end if

เป็นต้น
10 @R23554
ขอบคุณทุกคนมากค่ะ จากทำตามคำแนะนำตอนนี้ได้แล้วค่ะ

แต่มีอีกปัญหานึงค่ะ คือกดรันหมายเลขNumberได้แล้ว
แต่คราวนี้ในกรณีที่ผู้ใช้อยากกรอกใส่เอง อยากให้เปลี่ยนแปลงค่าที่รันหรือลบใส่ใหม่ได้

แต่ลองทำแล้วformatตัวหน้าต้องเหมือนกับformatที่กำหนดค่ะ
พอformatข้างหน้าตรง ข้างหลังจะกรอกอะไรต่อ สามารถบันทึกได้ แต่พอเปิดโปรแกรมมาใหม่มันรัน0001ใหม่ค่ะ เพราะมันเก็บค่าสุดท้ายที่กรอกเอง

มีวิธีไหนที่เมื่อเปลี่ยนค่าที่รัน,เรากรอกเอง พอเปิดโปรแกรมมารันเลขอีกครั้ง
จะจำเลขสุดท้ายที่รัน ไม่ใช่ที่กรอกเองไหมคะ



11 @R23576
ตรงคำสั่ง Dmax สามารถ เพิ่งเงื่อนไขได้ครับ

เช่น จากเดิม
x = DMax("Mid(QuotationID,4,4)", "Quotation_tbl", "Right(QuotationID,4) =" & Format(Now(), "yy"))

เราก็เพิ่มเงื่อนไขเข้าไป ว่า จะให้รันในกลุ่มไหน

x = DMax("Mid(QuotationID,4,4)", "Quotation_tbl", "Right(QuotationID,4) =" & Format(Now(), "yy") & " and left(QuotationID,3 Like 'NAT'")

อันนี้ คือให้มันไล่นับเฉพาะ เลขที่ขึ้นต้นด้วย คำว่า 'NAT' เท่านั้น ต่อให้มีการ แมน่วล คีย์เลขอื่นเข้าไป มันก็จะไม่ไปอ่านเลขที่รูปแบบอื่นๆ

อย่าลืม บรรทัดสุดท้ายในฟังก์ชั่น
ต้องให้มันเติม คำคำนี้ เข้าไปเหมือนเดิมล่ะ
AotoNo = "NAT" & ผลลัพธ์จากการคำนวนล่าสุด & เลขย่อปีปัจจุบัน

คือให้เน้นว่า ถ้าไปอ่านกลุ่ม NAT เวลาได้เลขใหม่ ก็ให้เติมคำว่า NAT เข้าไปเหมือนเดิมด้วย
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2458s