ลำดับ | เลขทะเบียน | ชื่อ - สกุล | สังกัด |
1 | 000009 | 000001-names | 000-001 |
2 | 000114 | 000002-names | 000-001 |
3 | 000148 | 000003-names | 000-001 |
4 | 000467 | 000004-names | 000-001 |
5 | 000567 | 000005-names | 000-001 |
6 | 000618 | 000006-names | 000-001 |
7 | 000619 | 000007-names | 000-001 |
8 | 000625 | 000008-names | 000-001 |
9 | 000626 | 000009-names | 000-001 |
10 | 000635 | 0000010-names | 000-001 |
11 | 000824 | 0000011-names | 000-001 |
12 | 000830 | 0000012-names | 000-001 |
13 | 000947 | 0000013-names | 000-001 |
14 | 000952 | 0000014-names | 000-001 |
1 | 000001 | 000001-names | 000-002 |
2 | 000005 | 000002-names | 000-002 |
3 | 000007 | 000003-names | 000-002 |
4 | 000016 | 000004-names | 000-002 |
1 | 001848 | 000001-names | 000-003 |
2 | 001987 | 000002-names | 000-003 |
3 | 002397 | 000003-names | 000-003 |
4 | 002835 | 000004-names | 000-003 |
5 | 002857 | 000005-names | 000-003 |
6 | 003111 | 000006-names | 000-003 |
7 | 003675 | 000007-names | 000-003 |
8 | 003814 | 000008-names | 000-003 |
สังเกตุตัวหนังสือสีแดงเราจะต้องการพิมพ์เอกสารเป็นรายชื่อลูกค้ารายคนตามลำดับ โดยแยกคอลัมแผนกออกจากกัน โดยตัวอย่างของเอกสารที่เราต้องการพิมพ์คือ
การประชุมใหญ่สามัญประจำปี 2562 | |||||
รายชื่อลูกค้า หน่วย000-001 | |||||
ลำดับ | เลขทะเบียน | ชื่อ - สกุล | เลขประจำตัวประชาชน | ลายเซ็น | ลายเซ็นอีกครั้ง |
1 | 000009 | 000001-names | 0000000000000 | ||
2 | 000114 | 000002-names | 0000000000000 | ||
3 | 000148 | 000003-names | 0000000000000 | ||
4 | 000467 | 000004-names | 0000000000000 | ||
5 | 000567 | 000005-names | 0000000000000 | ||
6 | 000618 | 000006-names | 0000000000000 | ||
7 | 000619 | 000007-names | 0000000000000 | ||
8 | 000625 | 000008-names | 0000000000000 | ||
9 | 000626 | 000009-names | 0000000000000 | ||
10 | 000635 | 0000010-names | 0000000000000 | ||
11 | 000824 | 0000011-names | 0000000000000 | ||
12 | 000830 | 0000012-names | 0000000000000 | ||
13 | 000947 | 0000013-names | 0000000000000 | ||
14 | 000952 | 0000014-names | 0000000000000 |
การประชุมใหญ่สามัญประจำปี 2562 | |||||
รายชื่อลูกค้า หน่วย000-002 | |||||
ลำดับ | เลขทะเบียน | ชื่อ - สกุล | เลขประจำตัวประชาชน | ลายเซ็น | ลายเซ็นอีกครั้ง |
1 | 000001 | 000001-names | 0000000000000 | ||
2 | 000005 | 000002-names | 0000000000000 | ||
3 | 000007 | 000003-names | 0000000000000 | ||
4 | 000016 | 000004-names | 0000000000000 |
การประชุมใหญ่สามัญประจำปี 2562 | |||||
รายชื่อลูกค้า หน่วย000-003 | |||||
ลำดับ | เลขทะเบียน | ชื่อ - สกุล | เลขประจำตัวประชาชน | ลายเซ็น | ลายเซ็นอีกครั้ง |
1 | 001848 | 000001-names | 0000000000000 | ||
2 | 001987 | 000002-names | 0000000000000 | ||
3 | 002397 | 000003-names | 0000000000000 | ||
4 | 002835 | 000004-names | 0000000000000 | ||
5 | 002857 | 000005-names | 0000000000000 | ||
6 | 003111 | 000006-names | 0000000000000 | ||
7 | 003675 | 000007-names | 0000000000000 | ||
8 | 003814 | 000008-names | 0000000000000 |
ปัญหาคืออะไร ใช้ print title แทนไม่ได้ เหรอ
-ไม่สามารถเปลี่ยนปริ้นไตเติ้ลแสดงตามหน่วยได้ รายชื่อลูกค้า หน่วย000-001 หรือ รายชื่อลูกค้า หน่วย000-002 ถ้าใช้ปริ้นไตเติ้ล มันจะใช้หัวเรื่องเหมือนกันหมด
- ต้องมาในใส่ break page ในแต่ละ หน่วยของลูกค้า ถ้าไม่เซนต์มันจะพิมพ์ต่อกันมาเรื่อยๆ
แก้ปัญหาด้วยมือ
- ทำการ copy หัวตารางไปใส่ไว้บนรายชื่อลูกค้าคนแรก และทำการใส่ Page Break เพื่อขึ้นหน้าใหม่ไว้ในลูกค้ำลำดับสุดท้าย ซึ่งปัญหาคือกรณมีลูกค้าเป็น 10,000 คน มีลูกค้าหลายๆหน่วย หรือหลายจังหวัด หลายตำบล ต้องมาแยกพิมพ์ การ copy ทำด้วยมือโอกาสผิดพลาดสูง ตาลายมาก
แก้ปัญหาง่ายๆ
- ปัญหาทั้งหมดที่กล่าวมาสามารถใช้คำสั่ง VB เขียนได้
หลักการทำงานของคำสั่ง VB ที่เขียนทำอย่างไรบ้าง
- เช็คว่าเป็นการพิมพ์ครั้งแรกหรือไม่ถ้าใช่ให้พิมพ์หัวตารางก่อน
- ในหัวตารางจะมีการดึงหน่วยงานของรายชื่อลูกค้าคนแรกออกมาคือคอลัม สังกัด นั่นเอง
- พิมพ์รายชื่อลูกค้าออกมา
- ทำการเช็คค่าว่ามีการขึ้นหน้าใหม่หรือไม่ ในโค้ด VB กำหนดการขึ้นหน้าใหม่ 25 record หรือ เมื่อลูกค้าเป็นคนสุดท้ายของกลุ่ม
- เช็คว่าเป็นคนสุดท้ายของกลุ่มนั้นหรือไม่ โดยเช็คจากคอลัมน์ลำดับปัจจุบัน เทียบกับคอลัมลำดับใน cell ต่อไป ถ้าลำดับปัจจุบันมีค่ามากกว่าแสดงว่าคนนี้เป็นคนสุดท้าย
เมื่อรันโปรแกรมแล้วเราจะได้แต่รายชื่อลูกค้าที่แยกตามแผนก และมีการขึ้นหน้าใหม่ด้วยคำสั่ง Break Page ตามภาพนี้
ใช้คำสั่ง vb ใน excel พิมพ์ รายชื่อลูกค้าตามหน่วยแยกจังหวัด |
เมื่อรายชื่อลูกค้าถึงคนสุดท้ายแล้ว จะใส่ break page ให้ |
คำสั่งเขียนโค้ด VB ที่สำคัญ
คำสั่งใส่ Break page
Worksheets("Sheet2").Rows(Pnext).PageBreak = xlPageBreakManual
คำสั่งผสานเซลล์
Worksheets("Sheet2").Range("A2:F2").Merge
นอกนั้นก็เป็นคำสั่งพื้นฐานที่น่าจะเข้าใจกันแล้ว สำหรับคนที่นึกภาพไม่ออกก็ลองเอาตัวไฟล์ excel นี้ไปรันได้เลย
ดาวน์โหลดไฟล์ตัวอย่าง
-ข้อควรระวัง
ก่อนการรันทุกครั้งต้องเคลียร์ page break, clear content, unmerg cell ทั้ง sheet ที่ 2 จึงจะสามารถรันได้แบบไม่เออเร่อ ไม่งั้นมันจะแจ้งเตือน error
การรันไฟล์ให้ไปที่แทบ
Developer ->Visual Basic -> กัดปุ่มรันสีเขียวหรือกด F5
หวังว่าตัวอย่างนี้จะเป็นประโยชน์สำหรับทุกท่านครับ มีเวลาจะถ่ายวีดีโอให้ดูครับผม