กระทู้เก่าบอร์ด อ.Yeadram
        
           3,692   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.0591s
    
      
		
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()) ออก