กระทู้เก่าบอร์ด อ.Yeadram
1,194 6
URL.หัวข้อ /
URL
รบกวนสอบถามการรันเลขครับ
ผมจัดทำทะเบียนซองเอกสาร โดยจัดเก็บซองตามตู้
ซึ่งตู้มี 30 ตู้
ใน 1 ตู้เอกสาร มี 5 ชั้น
ในแต่ละชั้นจัดเก็บได้ 120 ซอง
เช่น
1/1/1 หมายถึง ตู้ 1 ชั้น 1 ลำดับที่ 1
1/1/2 หมายถึง ตู้ 1 ชั้น 1 ลำดับที่ 2
ไปจนถึง
1/1/120 หมายถึง ตู้ 1 ชั้น 1 ลำดับที่ 120
พอรันถึงเลข 120 ให้ขึ้นชั้นใหม่เป็น
1/2/1 หมายถึง ตู้ 1 ชั้น 2 ลำดับที่ 1
1/2/2 หมายถึง ตู้ 1 ชั้น 2 ลำดับที่ 2
ไปจนถึง
1/2/120 หมายถึง ตู้ 1 ชั้น 2 ลำดับที่ 120
เมื่อรันถึง
1/5/120
ก็ให้ขึ้นตู้ใหม่เป็น
2/1/1
ถ้าหากต้องการรันข้อมูลแบบนี้สามารถทำได้ไหม อย่างไรบ้างครับ ขอบคุณมากครับ
ซึ่งตู้มี 30 ตู้
ใน 1 ตู้เอกสาร มี 5 ชั้น
ในแต่ละชั้นจัดเก็บได้ 120 ซอง
เช่น
1/1/1 หมายถึง ตู้ 1 ชั้น 1 ลำดับที่ 1
1/1/2 หมายถึง ตู้ 1 ชั้น 1 ลำดับที่ 2
ไปจนถึง
1/1/120 หมายถึง ตู้ 1 ชั้น 1 ลำดับที่ 120
พอรันถึงเลข 120 ให้ขึ้นชั้นใหม่เป็น
1/2/1 หมายถึง ตู้ 1 ชั้น 2 ลำดับที่ 1
1/2/2 หมายถึง ตู้ 1 ชั้น 2 ลำดับที่ 2
ไปจนถึง
1/2/120 หมายถึง ตู้ 1 ชั้น 2 ลำดับที่ 120
เมื่อรันถึง
1/5/120
ก็ให้ขึ้นตู้ใหม่เป็น
2/1/1
ถ้าหากต้องการรันข้อมูลแบบนี้สามารถทำได้ไหม อย่างไรบ้างครับ ขอบคุณมากครับ
6 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R21595
ขอบพระคุณมากครับผม
3 @R21598
Private Sub Form_Load()
Me.RecordSource = "SELECT * FROM Table1 WHERE Cabinet LIKE '" & Text0 & "*';"
DoCmd.GoToRecord , , acLast
Me.Text0 = "1/1/1"
End Sub
Private Sub cmd_Click()
Me.Text0 = AutoID(Me.Text0)
DoEvents
End Sub
Function AutoID(ID As String) As String
Dim IDKey() As String
Dim i As Integer
IDKey = Split(ID, "/")
If IDKey(2) + 1 > 120 Then
IDKey(2) = 1
If IDKey(1) + 1 > 5 Then
IDKey(1) = 1
If IDKey(0) + 1 > 30 Then
IDKey(0) = 30
IDKey(1) = 5
IDKey(2) = 120
Else
IDKey(0) = IDKey(0) + 1
End If
Else
IDKey(1) = IDKey(1) + 1
End If
Else
IDKey(2) = IDKey(2) + 1
End If
AutoID = IDKey(0) & "/" & IDKey(1) & "/" & IDKey(2)
End Function
ผมลองรันแล้วเวลาเปิดหน้าฟอร์มมา มันไม่อ้างอิงที่เรคคอร์ดสุดท้ายครับ แต่มันเริ่มต้นที่ 1/1/1 ใหม่อ่ะคับ รบกวนดูให้หน่อยคับว่าผิดตรงไหนครับผม ขอบคุณมากครับผม
Me.RecordSource = "SELECT * FROM Table1 WHERE Cabinet LIKE '" & Text0 & "*';"
DoCmd.GoToRecord , , acLast
Me.Text0 = "1/1/1"
End Sub
Private Sub cmd_Click()
Me.Text0 = AutoID(Me.Text0)
DoEvents
End Sub
Function AutoID(ID As String) As String
Dim IDKey() As String
Dim i As Integer
IDKey = Split(ID, "/")
If IDKey(2) + 1 > 120 Then
IDKey(2) = 1
If IDKey(1) + 1 > 5 Then
IDKey(1) = 1
If IDKey(0) + 1 > 30 Then
IDKey(0) = 30
IDKey(1) = 5
IDKey(2) = 120
Else
IDKey(0) = IDKey(0) + 1
End If
Else
IDKey(1) = IDKey(1) + 1
End If
Else
IDKey(2) = IDKey(2) + 1
End If
AutoID = IDKey(0) & "/" & IDKey(1) & "/" & IDKey(2)
End Function
ผมลองรันแล้วเวลาเปิดหน้าฟอร์มมา มันไม่อ้างอิงที่เรคคอร์ดสุดท้ายครับ แต่มันเริ่มต้นที่ 1/1/1 ใหม่อ่ะคับ รบกวนดูให้หน่อยคับว่าผิดตรงไหนครับผม ขอบคุณมากครับผม
4 @R21600
คือคุณต้องหาค่าเลขมากสุดให้ได้ก่อนครับ แล้วนำเลขนั้นมาใส่ในฟังก์ชั่นที่ให้ไป มันจะคำนวณเพิ่มค่าตามเงื่อนไข
สำคัญคือคุณต้องหาค่าสูงสุดให้ได้ ซึ่งจากรูปแบบเลขที่คุณต้องการ คงต้องเขียนฟังก์ชันการหาค่า Max อีก ลองโหลดตัวอย่างไปดูอีกครั้งครั้งครับ ลองศึกษาดู
ตัวอย่าง
สำคัญคือคุณต้องหาค่าสูงสุดให้ได้ ซึ่งจากรูปแบบเลขที่คุณต้องการ คงต้องเขียนฟังก์ชันการหาค่า Max อีก ลองโหลดตัวอย่างไปดูอีกครั้งครั้งครับ ลองศึกษาดู
ตัวอย่าง
5 @R21606
ขอบคุณมากครับผม
6 @R21608
ได้ความรู้ดีครับ ผมมือใหม่ เพิ่งเข้ามาเรียนรู้ครับ
Time: 0.2791s
Function AutoID(ID As String) As String
Dim IDKey() As String
Dim i As Integer
IDKey = Split(ID, "/")
If IDKey(2) + 1 > 120 Then
IDKey(2) = 1
If IDKey(1) + 1 > 5 Then
IDKey(1) = 1
If IDKey(0) + 1 > 30 Then
IDKey(0) = 30
IDKey(1) = 5
IDKey(2) = 120
Else
IDKey(0) = IDKey(0) + 1
End If
Else
IDKey(1) = IDKey(1) + 1
End If
Else
IDKey(2) = IDKey(2) + 1
End If
AutoID = IDKey(0) & "/" & IDKey(1) & "/" & IDKey(2)
End Function
ปรับใช้ดูครับ
ไฟล์ตัวอย่าง