Page 1 of 1

รันเลขที่บิล

Posted: Tue Jun 15, 2021 3:44 pm
by liveday
เรียนอาจารย์ทุกท่านครับ
ผมต้องการรันเลขที่บิลตาม Format ที่ต้องการ บันทึกข้อมูลปกติ แต่ไม่ยอมรันเลขที่ให้ครับ ต้องปรับ code อย่างไรบ้างครับ

Code: Select all

Worksheets("Payment").Range("J4") _
    = Format(Application.Max(Sheets("Database").Range("B:B")) + 1, "21-000")
ปล.ผมไม่แน่ใจว่าคำถามใหม่ต้องตั้งกระทู้ใหม่เลย หรือ ใช้กระทู้เก่าคนละคำถามได้ครับ ถ้าผิดกฎข้อไหนผมต้องขออภัยด้วยครับ

Re: รันเลขที่บิล

Posted: Tue Jun 15, 2021 6:05 pm
by snasui
:D ถ้าเป็นการถามต่อเนื่องกับกระทู้เดิมให้ถามในกระทู้เดิมได้เลย แต่ถ้าหากระทู้เดิมตั้งไว้นานแล้วและหาไม่พบก็สามารถตั้งเป็นกระทู้ใหม่ได้เช่นกัน ถ้าเป็นคนละเรื่องก็ให้ตั้งกระทู้ใหม่ครับ

ตามที่ถามมาตัวอย่างการปรับ Code ดูตามด้านล่างครับ

Code: Select all

'Other code
Dim i As Integer, lstNo As String

With Worksheets("Database")
    lstNo = .Range("b" & .Rows.Count).End(xlUp).Value
End With

With Worksheets("Payment")
    If lstNo = "No." Then
        .Range("j4").Value = "21-001"
    Else
        .Range("j4").Value = "21-" & Format(VBA.Right(lstNo, 3) + 1, "000")
    End If
End With
'Other code

Re: รันเลขที่บิล

Posted: Thu Jun 17, 2021 9:44 am
by liveday
ได้ตามต้องการครับ ขอบคุณครับ

Re: รันเลขที่บิล

Posted: Sat Jun 26, 2021 2:32 pm
by liveday
สอบถามเพิ่มเติมครับ หลักจากการใช้โค้ดแล้ว จะให้ช่องเซลล์แสดงเลขบิลถัดไปได้อย่างไรครับ
ที่ Sheet Report Cell J4 ครับ เลขที่ 21-001 พอกดบันทึกแล้วจะแสดงเป็น 21-001 อยู่ครับ ไม่ยอม +เพิ่มจากSheet Database ครับ

Code: Select all

Sub record()
Dim rs As Range, rt As Range
Dim rs1 As Range, rt1 As Range
Dim i As Integer, lstNo As String

With Worksheets("Database")
    lstNo = .Range("b" & .Rows.Count).End(xlUp).Value
End With

With Worksheets("Payment")
    If lstNo = "No." Then
        .Range("j4").Value = "21-001"
    Else
        .Range("j4").Value = "21-" & Format(VBA.Right(lstNo, 3) + 1, "000")
    End If
End With

With Worksheets("Template")
    i = Application.CountIf( _
        .Range("K3:K4"), ">0")
    Set rs = .Range("A2:K" & 2 + i)
    Set rs1 = .Range("A8:F8")
End With
    Set rt = Worksheets("Database") _
        .Range("A65536").End(xlUp).Offset(1, 0)
    Set rt1 = Worksheets("Report") _
        .Range("A65536").End(xlUp).Offset(1, 0)
    rs.Copy
    rt.PasteSpecial xlPasteValues
    rs1.Copy
    rt1.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
MsgBox "Finish"

End Sub

Re: รันเลขที่บิล

Posted: Sat Jun 26, 2021 3:28 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Sub record()
    Dim rs As Range, rt As Range
    Dim rs1 As Range, rt1 As Range
    Dim i As Integer, lstNo As String
    
    With Worksheets("Payment")
        If .Range("j4").Value = "" Then
            .Range("j4").Value = "21-001"
        End If
    End With
    With Worksheets("Template")
        i = Application.CountIf( _
            .Range("K3:K4"), ">0")
        Set rs = .Range("A2:K" & 2 + i)
        Set rs1 = .Range("A8:F8")
    End With
    Set rt = Worksheets("Database") _
        .Range("A65536").End(xlUp).Offset(1, 0)
    Set rt1 = Worksheets("Report") _
        .Range("A65536").End(xlUp).Offset(1, 0)
    rs.Copy
    rt.PasteSpecial xlPasteValues
    rs1.Copy
    rt1.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    
    With Worksheets("Database")
        lstNo = .Range("b" & .Rows.Count).End(xlUp).Value
    End With
    
    With Worksheets("Payment")
        .Range("j4").Value = "21-" & Format(VBA.Right(lstNo, 3) + 1, "000")
    End With
    MsgBox "Finish"
End Sub

Re: รันเลขที่บิล

Posted: Sun Jun 27, 2021 2:36 pm
by liveday
Code ได้ตามต้องการครับ แต่ว่าข้อมูลที่ Template Copy ไปแถวเดียวครับ ไม่สามารถ Copy ไปทั้งหมดครับ ต้องแก้ Code อย่างไรครับ

Code: Select all

Sub record()
    Dim rs As Range, rt As Range
    Dim rs1 As Range, rt1 As Range
    Dim i As Integer, lstNo As String
    
    With Worksheets("Payment")
        If .Range("j4").Value = "" Then
            .Range("j4").Value = "21-001"
        End If
        End With
            With Worksheets("Payment2")
        If .Range("j4").Value = "" Then
            .Range("j4").Value = "21-001"
        End If
        End With
            With Worksheets("Payment3")
        If .Range("j4").Value = "" Then
            .Range("j4").Value = "21-001"
        End If
    End With
    With Worksheets("Template")
        i = Application.CountIf( _
            .Range("j3:j7"), ">0")
        Set rs = .Range("A2:Q" & 2 + i)
        Set rs1 = .Range("A13:F13")
    End With
    Set rt = Worksheets("Database") _
        .Range("A65536").End(xlUp).Offset(1, 0)
    Set rt1 = Worksheets("Report") _
        .Range("A65536").End(xlUp).Offset(1, 0)
    rs.Copy
    rt.PasteSpecial xlPasteValues
    rs1.Copy
    rt1.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    
    With Worksheets("Database")
        lstNo = .Range("b" & .Rows.Count).End(xlUp).Value
    End With
    
    With Worksheets("Payment")
        .Range("j4").Value = "21-" & Format(VBA.Right(lstNo, 3) + 1, "000")
    End With
    
    With Worksheets("Payment")
        lstNo = .Range("j4").Value
    End With
    
    With Worksheets("Payment2")
        .Range("j4").Value = "21-" & Format(VBA.Right(lstNo, 3) + 1, "000")
    End With
       With Worksheets("Payment2")
        lstNo = .Range("j4").Value
    End With
    
    With Worksheets("Payment3")
        .Range("j4").Value = "21-" & Format(VBA.Right(lstNo, 3) + 1, "000")
    End With


    MsgBox "Finish"
End Sub

Re: รันเลขที่บิล

Posted: Sun Jun 27, 2021 2:51 pm
by snasui
:D เช็คด้วยการรัน Code ทีละ Step โดยการกดแป้น F8 จนมาถึงบรรทัดที่กำหนดค่าให้กับตัวแปร i > กด F8 อีกครั้งเพื่อให้รัน Code ผ่านบรรทัดนี้ > นำเมาส์ไปชี้ที่ตัวแปร i แล้วสังเกตค่าที่ได้ว่าตรงกับที่ต้องการหรือไม่ครับ

Re: รันเลขที่บิล

Posted: Sun Jun 27, 2021 3:03 pm
by liveday
ผมลองตามที่บอกนะครับ i=0 แต่ไม่แน่ใจต้องแก้อย่างไรครับ
Image

Re: รันเลขที่บิล

Posted: Sun Jun 27, 2021 3:12 pm
by snasui
:D แก้ด้วยการเช็คว่าฟังก์ชั่น Countif ที่กำหนดค่าให้กับตัวแปร i เขียนไว้ถูกต้องหรือไม่

จากสูตรที่เขียนมาเป็นการนับค่าที่มากกว่า 0 ในช่วง J3:J7 ดังนั้น ในช่วงเซลล์นี้จะต้องเป็นตัวเลขและต้องมีค่าที่มากกว่า 0 ด้วย อันนี้เป็นเบื้องต้น

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

Re: รันเลขที่บิล

Posted: Sun Jun 27, 2021 3:23 pm
by liveday
อ๋อ เข้าใจแล้วครับ ขอบคุณมากครับ