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
:D 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
:D เข้าใจว่าข้อมูลต้นทางอยู่นใชีต 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
:D ตัวอย่างการปรับ Code ครับ

นำไปวางแทน Code ทั้งหมดในช่วง

Code: Select all

for i = 1 to r
'...
Next i

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 ให้ :cp: :thup: :D