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

ถ้าเป็นการถามต่อเนื่องกับกระทู้เดิมให้ถามในกระทู้เดิมได้เลย แต่ถ้าหากระทู้เดิมตั้งไว้นานแล้วและหาไม่พบก็สามารถตั้งเป็นกระทู้ใหม่ได้เช่นกัน ถ้าเป็นคนละเรื่องก็ให้ตั้งกระทู้ใหม่ครับ
ตามที่ถามมาตัวอย่างการปรับ 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

ตัวอย่างการปรับ 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

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

Re: รันเลขที่บิล
Posted: Sun Jun 27, 2021 3:12 pm
by snasui

แก้ด้วยการเช็คว่าฟังก์ชั่น Countif ที่กำหนดค่าให้กับตัวแปร i เขียนไว้ถูกต้องหรือไม่
จากสูตรที่เขียนมาเป็นการนับ
ค่าที่มากกว่า 0 ในช่วง
J3:J7 ดังนั้น ในช่วงเซลล์นี้จะต้องเป็นตัวเลขและต้องมีค่าที่มากกว่า 0 ด้วย อันนี้เป็นเบื้องต้น
ข้อควรระวังอีกประการ หากช่วงดังกล่าวมีทั้งค่า 0 และค่าที่ไม่ใช่ 0 โดยเรียงสลับค่ากันคือ เป็น 0 กับไม่เป็น 0 สลับกันไป ค่าที่จะคัดลอกไปใช้ก็จะไม่ถูกต้องเช่นกัน เพราะการคัดลอกไปใช้จะคัดลอกค่าที่ติดกันเท่านั้น
Re: รันเลขที่บิล
Posted: Sun Jun 27, 2021 3:23 pm
by liveday
อ๋อ เข้าใจแล้วครับ ขอบคุณมากครับ