กระทู้เก่าบอร์ด อ.Yeadram
3,486 13
URL.หัวข้อ /
URL
ช่วยดูโค๊ดออร์โต้นัมเบอร์ให้หน่อยครับ
สวัสดีครับ ผมรบกวนสอบถามท่านอาจารย์ทุกท่านด้วยนะครับ คือผมได้โค๊ดนี้มาจากกระทู้ในนี้และได้เปลี่ยนแปลงบางส่วนให้เข้ากับงานของผมโดยโค๊ดมีดังนี้ครับ
Private Sub RunBy_Click()
Me.ByDocNum = AutoNo
End Sub
----------------------------------------------------------
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo", "mid(ByDocNo,3,4) = " & Year(Now()))
If IsNull(X) Or CInt(X) = 0 Then bk = 1 Else bk = X + 1
AutoNo = "IC" & Year(Now()) & "-" & Format(bk, "000000")
End Function
----------------------------------------------------------
ผมลัพที่ได้จะออกมาเป็น IC2011-000001
ถ้าผมต้องการให้ผลออกมาแค่เพียง IC-000001 โดยที่ไม่เอาปีเข้ามารวมด้วย
ไม่ทราบผมต้องแก้โค๊ดนี้ยังไงครับผม ผมลองแก้อยู่หลายทีแล้วครับ ขอบคุณครับ
Private Sub RunBy_Click()
Me.ByDocNum = AutoNo
End Sub
----------------------------------------------------------
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo", "mid(ByDocNo,3,4) = " & Year(Now()))
If IsNull(X) Or CInt(X) = 0 Then bk = 1 Else bk = X + 1
AutoNo = "IC" & Year(Now()) & "-" & Format(bk, "000000")
End Function
----------------------------------------------------------
ผมลัพที่ได้จะออกมาเป็น IC2011-000001
ถ้าผมต้องการให้ผลออกมาแค่เพียง IC-000001 โดยที่ไม่เอาปีเข้ามารวมด้วย
ไม่ทราบผมต้องแก้โค๊ดนี้ยังไงครับผม ผมลองแก้อยู่หลายทีแล้วครับ ขอบคุณครับ
13 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R07727
ขอบคุณครับคุณ Un ผมได้ลองทำตามที่ท่าน Un บอกแล้วครับมันขึ้น Run-time error '3075': ครับผม
รบกวนสอบถามด้วยครับ
รบกวนสอบถามด้วยครับ
3 @R07729
ในตารางของคุณ นอกจากเลขที่ ที่รันขึ้นต้นด้วย IC- แล้วมีเลขที่รูปแบบอื่น (ขึ้นต้นด้วยรูปแบบอื่นๆ) ด้วยหรือไม่ครับ
ถ้าคิดว่าไม่มีรูปแบบอื่น (ทั้งตารางรันเหมือนกัน คือ ขึ้นต้นด้วย IC- ทั้งหมด)
ให้เอาเงื่อนไข ออกจากฟังก์ชั่น Dmax ครับ ให้เหลือแค่
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo")
แต่ถ้ามีรูปแบบอื่นด้วย ก็ให้เปลี่ยนเงื่อนไข ไปตามความจำเป็นครับ เช่น เราจะตั้งเงื่อนไขว่า ให้ดูเลขที่สุดท้ายของเลขที่ ที่ขึ้นต้นด้วย IC- ก็ให้เปลี่ยนเงื่อนไขเป็น
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo", "Left(ByDocNo,3) Like 'IC-'")
ปัญหาของคุณอยู่ที่เงื่อนไขของ Dmax ครับ ลองปรับเปลี่ยนดูครับ
ถ้าคิดว่าไม่มีรูปแบบอื่น (ทั้งตารางรันเหมือนกัน คือ ขึ้นต้นด้วย IC- ทั้งหมด)
ให้เอาเงื่อนไข ออกจากฟังก์ชั่น Dmax ครับ ให้เหลือแค่
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo")
แต่ถ้ามีรูปแบบอื่นด้วย ก็ให้เปลี่ยนเงื่อนไข ไปตามความจำเป็นครับ เช่น เราจะตั้งเงื่อนไขว่า ให้ดูเลขที่สุดท้ายของเลขที่ ที่ขึ้นต้นด้วย IC- ก็ให้เปลี่ยนเงื่อนไขเป็น
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo", "Left(ByDocNo,3) Like 'IC-'")
ปัญหาของคุณอยู่ที่เงื่อนไขของ Dmax ครับ ลองปรับเปลี่ยนดูครับ
4 @R07730
ขอบคุณครับ คุณ yeadram ในตารางของผมเป็นตารางรหัสลูกค้าไม่ต้องการ Dlookup ครับคือให้มันรัน IC-000001, IC-000002 ไปเรื่อยๆนะครับ ถ้าผมเขียนอย่างนี้ถูกต้องไหมครับ
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo")
If IsNull(X) Or CInt(X) = 0 Then bk = 1 Else bk = X + 1
AutoNo = "IC" & Year(Now()) & "-" & Format(bk, "000000")
End Function
รบกวนด้วยนะครับ
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo")
If IsNull(X) Or CInt(X) = 0 Then bk = 1 Else bk = X + 1
AutoNo = "IC" & Year(Now()) & "-" & Format(bk, "000000")
End Function
รบกวนด้วยนะครับ
5 @R07736
ไม่ครับ ไม่
คุณต้องเอา year ออกอย่างที่คุณ Un บอกด้วยครับ
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo")
If IsNull(X) Or CInt(X) = 0 Then bk = 1 Else bk = X + 1
AutoNo = "IC-" & Format(bk, "000000")
End Function
คุณต้องเอา year ออกอย่างที่คุณ Un บอกด้วยครับ
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo")
If IsNull(X) Or CInt(X) = 0 Then bk = 1 Else bk = X + 1
AutoNo = "IC-" & Format(bk, "000000")
End Function
6 @R07738
ขอบคุณมากครับ ที่คุณ yeadram ช่วยเขียนโค๊ดให้ดู ขอบคุณมากๆครับผม
7 @R10016
ทำตามนี้ค่ะ
Private Sub RunBy_Click()
Me.ByDocNum = AutoNo
End Sub
----------------------------------------------------------
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo")
If IsNull(X) Or CInt(X) = 0 Then bk = 1 Else bk = X + 1
AutoNo = "IC-" & Format(bk, "000000")
End Function
ฟ้้องว่า run time error '94'
valid use of Null
รบกวนผู้รู้ ช่วยทีนะคะ
Private Sub RunBy_Click()
Me.ByDocNum = AutoNo
End Sub
----------------------------------------------------------
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo")
If IsNull(X) Or CInt(X) = 0 Then bk = 1 Else bk = X + 1
AutoNo = "IC-" & Format(bk, "000000")
End Function
ฟ้้องว่า run time error '94'
valid use of Null
รบกวนผู้รู้ ช่วยทีนะคะ
8 @R10037
ปรับแก้ตามนี้ดูครับ
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = nz(DMax("Right(ByDocNo,6)", "TbBuyInDocNo") ,0)
If X = 0 Then bk = 1 Else bk = X + 1
AutoNo = "IC-" & Format(bk, "000000")
End Function
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = nz(DMax("Right(ByDocNo,6)", "TbBuyInDocNo") ,0)
If X = 0 Then bk = 1 Else bk = X + 1
AutoNo = "IC-" & Format(bk, "000000")
End Function
9 @R10045
แก้ไขได้แล้วค่ะ ขอบคุณมากค่ะ
เหลืออีก 2 อย่างที่หนูต้องการทำค่ะ รบกวนอีกทีนะคะ
1.หนูต้องการให้ตั้งค่าตัวอักษรตัวแรกได้
สิ่งที่หนูทำคือ รับค่าจากหน้าตั้งค่า แล้วแยกตัวอักษรกับเลขใส่ไว้แยก 2 field ชื่อ txt_id และ num_id จากนั้น หน้าที่หนูจะรันรหัสขึ้นมา หนูจึงเรียก txt_id ขึ้นมา ดัง Code นี้
---------------------------------------------------------------
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = Nz(DMax("Right(PD_ID,5)", "TbBuyInDocNo"), 0)
If X = 0 Then bk = 1 Else bk = X + 1
AutoNo = (txt_id) & Format(bk, "00000")
End Function
----------------------------------------------------------------
ปรากฏว่า สิ่งที่หนูได้คือ A00001,00002,00003.....
หนูต้องทำอย่างไรคะ
2. เมื่อรันรหัสขึ้นมา หนูต้องการใช้โชว์รหัสเลย ก่อนที่จะคีย์ข้อมูลใดๆ และ ช่องที่รันรหัสขึ้นมาไม่สามารถแก้ไขรหัสได้
หนูคิดว่า อาจจะต้องเปลี่ยน Action จาก Exit เป็นอย่างอื่น และต้องเขียนอะไรเพิ่ม ก็ลองหลายอย่างแล้ว แต่ก็ไม่ได้ค่ะ หนูจะแก้ยังไงดีคะ
Private Sub RunBy_Exit(Cancel As Integer)
Me.PD_ID = AutoNo
End Sub
เกือบได้แล้วค่ะ รบกวนอาจารย์ช่วยชี้แนะหนูด้วยนะคะ ขอบคุณค่ะ
เหลืออีก 2 อย่างที่หนูต้องการทำค่ะ รบกวนอีกทีนะคะ
1.หนูต้องการให้ตั้งค่าตัวอักษรตัวแรกได้
สิ่งที่หนูทำคือ รับค่าจากหน้าตั้งค่า แล้วแยกตัวอักษรกับเลขใส่ไว้แยก 2 field ชื่อ txt_id และ num_id จากนั้น หน้าที่หนูจะรันรหัสขึ้นมา หนูจึงเรียก txt_id ขึ้นมา ดัง Code นี้
---------------------------------------------------------------
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = Nz(DMax("Right(PD_ID,5)", "TbBuyInDocNo"), 0)
If X = 0 Then bk = 1 Else bk = X + 1
AutoNo = (txt_id) & Format(bk, "00000")
End Function
----------------------------------------------------------------
ปรากฏว่า สิ่งที่หนูได้คือ A00001,00002,00003.....
หนูต้องทำอย่างไรคะ
2. เมื่อรันรหัสขึ้นมา หนูต้องการใช้โชว์รหัสเลย ก่อนที่จะคีย์ข้อมูลใดๆ และ ช่องที่รันรหัสขึ้นมาไม่สามารถแก้ไขรหัสได้
หนูคิดว่า อาจจะต้องเปลี่ยน Action จาก Exit เป็นอย่างอื่น และต้องเขียนอะไรเพิ่ม ก็ลองหลายอย่างแล้ว แต่ก็ไม่ได้ค่ะ หนูจะแก้ยังไงดีคะ
Private Sub RunBy_Exit(Cancel As Integer)
Me.PD_ID = AutoNo
End Sub
เกือบได้แล้วค่ะ รบกวนอาจารย์ช่วยชี้แนะหนูด้วยนะคะ ขอบคุณค่ะ
10 @R10048
แก้ไปแก้มา แก้ปัญหา ข้อ 1 ได้แล้วค่ะ
คือ ไม่ต้องแยกฟิลด์ ก็ดึงค่าจาก PD_ID ที่กรอกเข้าไปแล้วมาแสดง โดยใช้ Code นี้ค่ะ(มั่วๆ)
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = Nz(DMax("Right(PD_ID,5)", "TbBuyInDocNo"), 0)
Z = Nz(DMax("Left(PD_ID,1)", "TbBuyInDocNo"), 0)
If X = 0 Then bk = 1 Else bk = X + 1
AutoNo = Z & Format(bk, "00000")
End Function
ได้ผลเป็นที่น่าพอใจ
ลองเทสเริ่มจาก A00005, A00006, A00007... แต่ว่าปัญหาก็ยังมีเหมือนเดิมค่ะ
คือรหัสที่แสดงตัวแรก มันจะถูกตัวที่สองมาทับซ้ำใน Record เดียวกัน แล้วจึงเพิ่ม Record ต่อไป คือ จะแสดง A00005 เมื่อ run และเมื่อกดแท็บเลื่อนไปยังคอลัมม์ต่อไป A00006 กลับมาทับ A00005 ส่วน A00007... + ได้เป็นปกติค่ะ ไม่ทราบว่า ต้องแก้ไข อย่างไรคะ
ส่วนข้อ 2 ยังไม่ได้เหมือนเดิมค่ะ
ขอบคุณค่ะ
คือ ไม่ต้องแยกฟิลด์ ก็ดึงค่าจาก PD_ID ที่กรอกเข้าไปแล้วมาแสดง โดยใช้ Code นี้ค่ะ(มั่วๆ)
Function AutoNo() As String
Dim X As Variant
Dim bk As String
X = Nz(DMax("Right(PD_ID,5)", "TbBuyInDocNo"), 0)
Z = Nz(DMax("Left(PD_ID,1)", "TbBuyInDocNo"), 0)
If X = 0 Then bk = 1 Else bk = X + 1
AutoNo = Z & Format(bk, "00000")
End Function
ได้ผลเป็นที่น่าพอใจ
ลองเทสเริ่มจาก A00005, A00006, A00007... แต่ว่าปัญหาก็ยังมีเหมือนเดิมค่ะ
คือรหัสที่แสดงตัวแรก มันจะถูกตัวที่สองมาทับซ้ำใน Record เดียวกัน แล้วจึงเพิ่ม Record ต่อไป คือ จะแสดง A00005 เมื่อ run และเมื่อกดแท็บเลื่อนไปยังคอลัมม์ต่อไป A00006 กลับมาทับ A00005 ส่วน A00007... + ได้เป็นปกติค่ะ ไม่ทราบว่า ต้องแก้ไข อย่างไรคะ
ส่วนข้อ 2 ยังไม่ได้เหมือนเดิมค่ะ
ขอบคุณค่ะ
11 @R10050
อย่าปล่อยให้มันทำงานทันทีครับ
ต้องมีเงื่อนไขให้มันบ้าง
Private Sub RunBy_Exit(Cancel As Integer)
if me.PD_ID="" or isnull(Me.PD_ID) then Me.PD_ID = AutoNo
End Sub
ต้องมีเงื่อนไขให้มันบ้าง
Private Sub RunBy_Exit(Cancel As Integer)
if me.PD_ID="" or isnull(Me.PD_ID) then Me.PD_ID = AutoNo
End Sub
12 @R10051
ขอบคุณอาจารย์ yeadram มากค่ะ ที่สละเวลาพักผ่อนวันหยุดมาตอบให้
ตอบโจทย์ครบสมบูรณ์ค่ะ
ถ้ามีอะไรที่หนูช่วยได้บอกนะคะ
หนูเป็นหนี้บุญคุณอาจารย์แล้ว
ตอบโจทย์ครบสมบูรณ์ค่ะ
ถ้ามีอะไรที่หนูช่วยได้บอกนะคะ
หนูเป็นหนี้บุญคุณอาจารย์แล้ว
13 @R10052
เรียนอาจารย์ yeadram ที่เคารพค่ะ
แฮะๆ นึกว่า จะจบละ ยังนิดนึงค่ะ
เนื่องจากรหัสสินค้าของหนูสามารถตั้งค่าใหม่ได้ หนูต้องการให้ทุกครั้งที่มีการตั้งค่าใหม่ มันไปเริ่มที่ Record สุดท้ายค่ะ
ตอนนี้ ถ้าเพิ่มเข้ามาใหม่มันไปทับที่ Record แรก แล้วพอเลื่อนไป Record สุด มันจะยังรันรหัสตัวเดิมอยู่ค่ะ
** มีตรงไหนเค้าแจก Code พร้อมอธิบายมั้ย คะ หนูเริ่ม ต้นใหม่ อ่านจบไปเล่มหนึ่ง ก็ยังไม่ค่อยมีไรในหัวเลยค่ะ
แฮะๆ นึกว่า จะจบละ ยังนิดนึงค่ะ
เนื่องจากรหัสสินค้าของหนูสามารถตั้งค่าใหม่ได้ หนูต้องการให้ทุกครั้งที่มีการตั้งค่าใหม่ มันไปเริ่มที่ Record สุดท้ายค่ะ
ตอนนี้ ถ้าเพิ่มเข้ามาใหม่มันไปทับที่ Record แรก แล้วพอเลื่อนไป Record สุด มันจะยังรันรหัสตัวเดิมอยู่ค่ะ
** มีตรงไหนเค้าแจก Code พร้อมอธิบายมั้ย คะ หนูเริ่ม ต้นใหม่ อ่านจบไปเล่มหนึ่ง ก็ยังไม่ค่อยมีไรในหัวเลยค่ะ
Time: 0.3444s
Dim X As Variant
Dim bk As String
X = DMax("Right(ByDocNo,6)", "TbBuyInDocNo", "mid(ByDocNo,3,4) = ")
If IsNull(X) Or CInt(X) = 0 Then bk = 1 Else bk = X + 1
AutoNo = "IC" & Year(Now()) & "-" & Format(bk, "000000")
End Function
ตัด & Year(Now()) ออก