Page 1 of 1
ต้องการให้ Label เรียงตามหมายเลขกล่องจากน้อยไปมาก
Posted: Sat Jul 27, 2019 10:56 pm
by goodexcel
เรียน ท่านอาจารย์และท่านสมาชิกทุกท่าน
เนื่องจากมีความจำเป็นต้องทำ Label ติดหน้ากล่องก่อนส่งให้ลูกค้าซึ่งการส่งแต่ละครั้งมีจำนวนจำนวนมาก จึงต้องการเขียน Macro เพื่อให้สร้าง Label ตาม Packing list และเรียง Label ตามหมายเลขกล่องจากน้อยไปมาก แต่ผลที่ได้จากการใช้ For i พบว่า label เรียงหมายเลขกล่องแบบเลขคี่ สลับกับเลขคู่ จากไฟล์ตัวอย่างมีจำนวนกล่องทั้งหมด 7 กล่อง คือเรียง 1,3,5,7,4,6 และกล่องที่ 2 หายไป จึงรบกวนท่านผู้รู้ช่วยแนะนำวิธีแก้ไขด้วยค่ะ เนื่องจากยังไม่มีความชำนาญในการใช้ Macro ค่ะ
ขอบคุณค่ะ
Re: ต้องการให้ Label เรียงตามหมายเลขกล่องจากน้อยไปมาก
Posted: Sun Jul 28, 2019 1:51 pm
by snasui
Code ที่ติดปัญหาชืออะไร อยู่ใน Module ใด หาก Run ถูกต้องจะมีลักษณะเป็นอย่างไร จะได้เข้าถึงปัญหาได้โดยไวครับ
Re: ต้องการให้ Label เรียงตามหมายเลขกล่องจากน้อยไปมาก
Posted: Sun Jul 28, 2019 2:09 pm
by goodexcel
เรียน ท่านอาจารย์
Code ชื่อ Create_Shipping อยู่ใน Module1 ค่ะ หาก Run ได้ถูกต้องจะแสดงตัวอย่างตามเอกสารแนบค่ะ
ขอบคุณค่ะ
Re: ต้องการให้ Label เรียงตามหมายเลขกล่องจากน้อยไปมาก
Posted: Sun Jul 28, 2019 2:28 pm
by snasui
เข้าใจว่าข้อมูลต้นทางอยู่นใชีต VBA
มีหลักการนำข้อมูลมาเรียงใน Label แต่ละค่าอย่างไรช่วยอธิบายมาด้วยครับ
Re: ต้องการให้ Label เรียงตามหมายเลขกล่องจากน้อยไปมาก
Posted: Sun Jul 28, 2019 2:48 pm
by goodexcel
เรียน ท่านอาจารย์
ใช่ค่ะ ข้อมูลมาจาก Sheet VBA ซึ่งเป็น Packing list ที่แสดงรายการสินค้าที่ส่งมามีกี่กล่อง แต่ละกล่องมีจำนวนเท่าไหร่ สินค้าประเภทไหน แล้วเขียนสูตรเพื่อสรุปอยู่ใน Module1 Code ชื่อ Formulas_SM (ผลที่ได้แสดงใน sheet VBA คอลัมน์ AO:AY ค่ะ
หลัการการนำข้อมูลมาเรียงใน Label คือ มีข้อมูล 7 ส่วนด้วยกัน ดังนี้
1. IMPORTER : Fashions Co., LTD.
2. SHIPPER : AA
3. JB AA
4. Product : Flats Shoes
5. Made In : Thailand
6. C/No. 1 / 17
7. PCS in carton : 16 pcs.
โดยส่วนที่ 1-3,5 ผู้ใช้ key in เข้าไปใน Sample Label ใน Sheet Shipping Mark จากนั้นสั่งให้ Copy มาวางใน Label ตัวจริงทุกอันค่ะ
1. IMPORTER : Fashions Co., LTD. (= o)
2. SHIPPER : AA = p
3. JB AA = q
5. Made In : Thailand = n
คำสั่งใน Code Create_Shipping คือ
ActiveCell.Offset(1, 0).Value = o
ActiveCell.Offset(2, 0).Value = p
ActiveCell.Offset(3, 0).Value = q
ActiveCell.Offset(5, 0).Value = n
และส่วนที่ 4-7 คือให้คำนวนค่าที่ได้จาก sheet VBA คอลัมน์ AO:AY แล้วนำมาใส่ใน Label ค่ะ
4. Product : Flats Shoes
5. Made In : Thailand
6. C/No. 1 / 17
7. PCS in carton : 16 pcs.
คำสั่งใน Code Create_Shipping คือ
For i = 1 To r
k = Sheets("VBA").Cells(m + (i * 2 - 1), 50)
l = Sheets("VBA").Cells(m + (i * 2 - 1), 51)
x = Sheets("VBA").Cells(m + (i * 2), 50)
y = Sheets("VBA").Cells(m + (i * 2), 51)
และถ้าหมายเลขกล่องเป็นจำนวนคู่จะใช้
ActiveCell.Offset(1, 0).Value = o
ActiveCell.Offset(2, 0).Value = p
ActiveCell.Offset(3, 0).Value = q
ActiveCell.Offset(4, 0).Value = "Product : " & k
ActiveCell.Offset(5, 0).Value = n
ActiveCell.Offset(6, 0).Value = "C/No. " & i * 2 - 1 & " / " & j
ActiveCell.Offset(7, 0).Value = "Qty in carton : " & l & " pcs."
และถ้าหมายเลขกล่องเป็นจำนวนคี่จะใช้
ActiveCell.Offset(1, 0).Value = o
ActiveCell.Offset(2, 0).Value = p
ActiveCell.Offset(3, 0).Value = q
ActiveCell.Offset(4, 0).Value = "Product : " & x
ActiveCell.Offset(5, 0).Value = n
ActiveCell.Offset(6, 0).Value = "C/No. " & i * 2 - 1 & " / " & j
ActiveCell.Offset(7, 0).Value = "Qty in carton : " & y & " pcs."
ขอบคุณค่ะ
Re: ต้องการให้ Label เรียงตามหมายเลขกล่องจากน้อยไปมาก
Posted: Mon Jul 29, 2019 6:34 am
by snasui
ตัวอย่างการปรับ Code ครับ
นำไปวางแทน Code ทั้งหมดในช่วง
Code: Select all
'Other code
Dim rall As Range
Dim rng As Range
Dim lineStep As Integer
Dim startRng As Range
lineStep = 0
With Sheets("VBA")
Set rall = .Range("aw14").Resize(.Range("aw1").Value, 1)
End With
With Sheets("Shipping Mark")
Set startRng = .Range("b29").Offset(lineStep, 0)
For Each rng In rall
Range("Origin").Copy startRng.Offset(lineStep - 1, 0)
startRng.Offset(lineStep, 0).Value = o
startRng.Offset(lineStep + 1, 0).Value = p
startRng.Offset(lineStep + 2, 0).Value = q
startRng.Offset(lineStep + 3, 0).Value = rng.Offset(0, 1).Value
startRng.Offset(lineStep + 4, 0).Value = n
startRng.Offset(lineStep + 5, 0).Value = "c/No. " & rng.Value & "/" & Application.Max(rall.Value)
startRng.Offset(lineStep + 6, 0).Value = "Qty in carton: " & rng.Offset(0, 2).Value & " pcs."
lineStep = lineStep + 14
Next rng
Application.CutCopyMode = False
End With
'Other code
Re: ต้องการให้ Label เรียงตามหมายเลขกล่องจากน้อยไปมาก
Posted: Mon Jul 29, 2019 3:07 pm
by goodexcel
เรียน ท่านอาจารย์
แก้ไข Code ตามที่อาจารย์แนะนำ และทดลองใช้ข้อมูลทั้งหมด 45 กล่อง พบว่า รายละเอียดใน Label ทั้ง 7 ส่วนถูกต้องตรงตามข้อมูลใน Sheet VBA ค่ะ
ขอบพระคุณท่านอาจารย์มากค่ะ ที่ช่วยแก้ไข Code ให้