หลายคนพอเริ่มใช้ Macro Recorder เป็น จะเห็นว่าวิธีสร้างรหัส VBA ขึ้นมาใช้งานไม่ได้ยากอย่างที่คิด ที่แท้แค่สั่ง Record Macro เท่านั้น จากนั้นอยากใช้รหัส VBA ทำงานอย่างไร ขอให้ใช้เมาส์และแป้นพิมพ์ทำงานตามแบบที่ต้องการ จะเกิดรหัส VBA ขึ้นตามต่อมาให้โดยเราไม่ต้องเขียน VBA เองแม้แต่น้อย
จากขั้นตอนง่ายๆจากการใช้ Macro Recorder นี่แหละ กลายเป็นตัวกระตุ้นให้หาทางใช้ VBA ต่อกัน บางคนพอสามารถใช้ VBA ควบคุมแฟ้ม Excel ให้ทำงานได้ดั่งใจ ก็จะยกแฟ้มที่สร้างด้วยฝีมือตนอวดให้คนอื่นดูด้วยความภาคภูมิใจ โดยหารู้ไม่ว่า ผลงานที่ตนชื่นชมอย่างยิ่งนั้น ไม่ได้คุ่มค่าอย่างที่คิด
คุ้มค่า ค่าของอะไร เทียบกับอะไร
ลองนึกดูซิว่า ถ้าคุณเสียเวลาสร้างรหัส VBA นานนับชั่วโมง แต่รหัส VBA ที่ใช้นั้นสามารถช่วยประหยัดเวลาการทำงานได้แค่ไม่กี่นาที ในกรณีเช่นนี้จะถือว่าคุ้มค่าไหม แต่ต่อมาถ้าต้องใช้รหัสนั้นซ้ำแล้วซ้ำอีก เมื่อนับรวมเวลาที่ประหยัดได้แล้วเกินกว่าเวลาที่ใช้สร้าง VBA อย่างนี้จึงเรียกได้ว่า คุ้มใช่ไหม.... ยังหรอก คิดเทียบแค่นี้ง่ายเกินไป
กว่าจะใช้ VBA เป็น คุณต้องลงทุนลงแรงอะไรบ้าง
- เสียเวลามาเข้าอบรม
- เสียเงินซื้อหนังสือ VBA มาอ่าน
- เสียเวลาลองผิดลองถูกตอนฝึกใช้ VBA
- เสียเวลาเขียนคู่มือ บันทึกขั้นตอนและวิธีการที่ใช้
- เสียเวลาประกาศตัวแปร เพื่อทำให้รหัสทำงานได้เร็วขึ้น
- เสียเวลาปรับปรุงตัดรหัส VBA ที่ไม่จำเป็น ทำให้สั้นกะทัดรัด
- เสียเวลาย้อนกลับมาแกะรหัสเดิมที่เขียนไว้นานแล้ว เพื่อใช้ใหม่
- เสียโอกาสใช้เวลาให้กับชีวิตส่วนตัว เสียความสุขในชีวิตไปบางส่วน
จากนี้ขอยกเฉพาะประเด็นที่ควรแก่การทำความเข้าใจหรืออาจเข้าใจไม่ตรงกัน มาอธิบาย
เสียเวลามาเข้าอบรม
หลักสูตรอบรมที่ว่าด้วยวิธีใช้ VBA ถ้าจะให้สมบูรณ์ จะต้องใช้เวลาอบรมนานเป็นเดือน เรียนกัน ให้การบ้านทำมาส่งอาจารย์กัน เหมือนกับสมัยที่เราเรียนวิชาหนึ่งๆสมัยมหาวิทยาลัยนั่นแหละ จึงจะได้ผลสมบูรณ์ แต่ถ้าให้เวลาอบรมเพียงไม่กี่ชั่วโมง เรียนติดต่อกันเพียงไม่กี่วัน ถือว่ายากมากที่จะเกิดผลตามต้องการ ไหนจะต้องแบ่งเวลาให้กับภาคทฤษฎี ตามด้วยเวลาที่เหลือ มาใช้ปฏิบัติสร้างงานกัน
ถ้าเรียนติดต่อกัน 3 วัน แล้วใช้เวลาให้กับการทดลองใช้ VBA แค่ตัวอย่างเดียวหรือไม่กี่ตัวอย่าง พอจบอบรมออกมา แทบทุกคนจะนำความรู้ที่เพิ่งอบรมจบไป นำมาใช้ได้กับงานที่ตรงกับตัวอย่างที่เรียนมาเท่านั้น ส่วนงานที่ไม่ตรงกับตัวอย่างที่อบรม ต้องปล่อยไว้อย่างเดิมนั่นแหละ เพราะคิดต่อเองไม่เป็น บางคนพออบรมเสร็จ ก็คืนความรู้ที่เรียนไปคืนให้อาจารย์ทันที เพราะตัวอย่างที่เรียนไปนั้น ไม่เห็นตรงกับงาน ไม่ตรงกับปัญหาของตนที่ต้องการเอาความรู้ที่เรียนไปกลับไปแก้ปัญหา
ที่แย่กว่านั้น ถ้าติดปัญหาสงสัยในระหว่างอบรม แล้วไม่กล้าถาม ไม่กล้ายกมือบอกว่าไม่เข้าใจ ขอให้สอนซ้ำ ยิ่งเรียนต่อนานเข้า ปัญหาค้างคาใจจะมีมากขึ้นจนกลายเป็นดินพอกหางหมู สมองของผู้เข้าอบรมคนนั้นมักจะปิดรับรู้เรื่องที่อบรมส่วนที่เหลือ ที่ว่าอบรมกัน 3 วัน จึงกลายเป็นว่า รู้เรื่อง ตามเนื้อหาทันแค่วันแรกเท่านั้น ส่วนความรู้ที่เหลืออีก 2 วัน หายสาบสูญไปในอากาศ
ดังนั้นถ้าต้องเสียเวลาทำงานมาเข้าอบรม แล้วอยากได้ผลคุ้มค่ากับเวลาที่เสียไป ต้องหาทางใช้เวลาระหว่างการอบรมให้ยืดหยุ่นที่สุด มุ่งเน้นให้คิดเองทำเองต่อให้เป็น อย่าเอาแต่ท่องจำ ขอให้ใช้เวลาทำตัวอย่างหลายๆแบบ ปฏิบัติมากๆ ส่วนทฤษฎีตามมาทีหลัง หัวข้อเนื้อหาหลักสูตรควรมุ่งที่ตัวปัญหาในงานว่า จะใช้ VBA อย่างไรกลับมาใช้กับปัญหานั้น อย่าเรียนแบบไล่ตามเนื้อหาของ VBA ว่ามีอะไรบ้าง
คุณควรถือว่า เวลาที่เสียไปกับการอบรมเพียง 3 วัน เป็นเพียงจุดเริ่มต้นที่ช่วยให้คุณเองได้เรียนรู้ เป็นแนวทางให้คุณสามารถย้อนกลับมาลองผิดลองถูก และค่อยๆเพิ่มพูนความรู้เรื่อง VBA ให้ลึกขึ้นเองในภายหลัง ซึ่งต้องใช้เวลาศึกษาเองต่ออีกนานนับปีทีเดียว ถ้าคุณตั้งหลักคิดได้อย่างนี้ รับรองว่าที่เสียเวลามาอบรม VBA จะคุ้มค่าทีเดียว
เสียเงินซื้อหนังสือ VBA มาอ่าน
เรื่องหนังสือ VBA นี้ต้องช่วยทำใจกันหน่อย เพราะจะหาหนังสือ VBA ที่ให้คำตอบที่เราต้องการไม่ค่อยได้หรอก แม้หนังสือ VBA โดยทั่วไปเป็นหนังสือที่ดี แต่ที่ว่า ดี ก็เพราะมีเนื้อหาให้รายละเอียดได้ดีมาก ไล่เรียงจากที่ไปที่มา ว่าด้วย VBA คืออะไร มีหน้าตาของรหัสเป็นอย่างไร ต้องเขียนโครงสร้างรหัสอย่างไร มีกฎเกณฑ์อะไรที่ต้องระวัง จากนั้นมักเป็นเนื้อหาขั้นยาก ยากแบบที่เรียกว่า กระโดดข้ามขั้นไปยากสุดๆกันเลย และตัวอย่างที่ใช้ก็ไม่ค่อยตรงกับที่เราต้องการ
หนังสือ VBA ที่คุณควรหาซื้อมาเก็บไว้ ไม่ควรมีเนื้อหาแค่ VBA แต่ควรมีเนื้อหาอธิบายครอบคลุมถึงความสัมพันธ์ของ VBA กับ Excel ด้วย โดยขอแนะนำหนังสือของ John Walkenbach ซึ่งมีเนื้อหาที่อ่านง่าย ไล่เรียงตั้งแต่ Excel เรื่อยไปจนถึงตัว VBA และมีตัวอย่างประกอบไปตลอด ต่างจากหนังสือของผู้แต่งคนอื่นที่ชอบเริ่มบทแรกเป็น VBA และใช้ตัวอย่างยากๆ ที่คนเก่งๆเห็นแล้วก็ยังงง
อย่างไรก็ตามคุณควรหาซื้อหนังสือ VBA ไว้หลายๆเล่ม จากผู้เขียนหลายๆคน เพราะหนังสือแต่ละเล่ม มักไม่ได้รวบรวมคำตอบที่คุณต้องการทั้งหมดไว้ด้วยกัน ขอให้เก็บหนังสือไว้ใช้ค้นหาคำตอบเมื่อคุณติดปัญหา ลองนึกดูว่า ถ้าคุณใช้ VBA แล้วติดขัดขึ้นมา งานไม่เดินนานเป็นชั่วโมงหรือเป็นวัน ช่วงเวลาที่งานหยุดนิ่งนี้แหละ คิดต้นทุนที่เสียไปเป็นเงินเป็นทองได้มหาศาล แต่ถ้ามีหนังสือให้พลิกค้นหาคำตอบ สามารถแก้ไขปัญหาที่ติดค้างอยู่ได้ทันที อย่างนี้จึงเรียกว่า ซื้อหนังสือมาแล้วคุ้ม
เสียเวลาประกาศตัวแปร เพื่อทำให้รหัสทำงานได้เร็วขึ้น
การประกาศตัวแปร มาจากคำว่า Declare Variables เป็นคำสั่งที่กำหนดให้เขียนขึ้นในบรรทัดแรกๆของรหัส VBA ทั้งหมด เพื่อกำหนดให้คอมพิวเตอร์ใช้หน่วยความจำเท่าที่จำเป็น สำหรับเก็บค่าไว้ในตัวแปรแต่ละประเภท ได้แก่ Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String แล้วจะส่งผลให้รหัสทำงานเร็วขึ้น
แม้การประกาศตัวแปรดังกล่าว ต้องเขียนไว้บรรทัดบนๆของแต่ละชุดคำสั่ง แต่มิได้มีความหมายว่า เราจำเป็นต้องเสียเวลากำหนดตัวแปรไว้ตั้งแต่ตอนเริ่มต้นเขียนรหัส หรือจำเป็นต้องประกาศตัวแปรก่อนเสมอ มิฉะนั้นรหัส VBA จึงจะทำงาน อีกทั้งเมื่อประกาศตัวแปรไว้แล้ว ยังไม่แน่ว่ารหัส VBA จะทำงานเร็วขึ้นมาก จนเราสังเกตเห็นได้ว่าเร็วขึ้นอย่างชัดเจน
แต่เดิมนั้นเครื่องคอมพิวเตอร์ทำงานช้ามาก ยิ่งต้องใช้รหัสยาวๆหลายๆบรรทัด ยิ่งทำให้คอมพิวเตอร์ทำงานช้าลง และถ้าเทียบรหัส VBA ที่ใช้กับ Excel ที่ว่ายาวกับรหัสที่ใช้ในโปรแกรมอื่นแล้ว ถือว่ารหัส VBA ที่ใช้กับ Excel นี้สั้นกว่ามาก และคอมพิวเตอร์ยุคนี้ทั้งเร็วและราคาถูก ราคาหน่วยความจำก็ไม่แพงเหมือนแต่ก่อน
แทนที่จะเสียเวลาประกาศตัวแปรในตอนต้น ขอแนะนำให้เลือกประกาศตัวแปรต่อเมื่อจำเป็นเท่านั้น และไม่ต้องรีบร้อนเสียเวลาประกาศตัวแปรด้วยซ้ำ ควรรอจนกว่าเมื่อทดลองสั่งให้รหัส VBA ทำงานแล้วพบว่าช้า จึงค่อยหาทางปรับปรุงแก้ไขให้รหัสทำงานเร็วขึ้น ซึ่งเมื่อประกาศตัวแปรแล้วอาจพบว่า ไม่ได้ช่วยให้รหัสทำงานเร็วขึ้นแต่อย่างใด เนื่องจากรหัสจะทำงานได้เร็วหรือช้านั้น มิได้ขึ้นกับการประกาศตัวแปรเพียงอย่างเดียว และการประกาศตัวแปรที่ไม่เหมาะสม อาจทำให้รหัสไม่ทำงานตามที่คิดไว้ แล้วกว่าจะหาคำตอบเจอว่าต้องแก้ไขในส่วนของการประกาศตัวแปร อาจต้องเสียเวลาค้นหาจุดผิดพลาด หาแล้วหาอีกก็ยังไม่พบเพราะคิดไม่ถึงว่า ปัญหาเกิดจากตัวแปรนี่เอง
นอกจากนี้ลองพิจารณาว่า ถ้าต้องเสียเวลาหลายนาทีคิดเขียนประกาศตัวแปร แล้วทำให้แฟ้มงานทำงานเร็วขึ้นเพียงแค่เสี้ยววินาที อย่างนี้เรียกว่า คุ้มหรือไม่ ต่อเมื่อคุณมีข้อจำกัดว่า เครื่องคอมพิวเตอร์ที่ใช้ทำงานนั้นเป็นรุ่นเก่า ทำงานช้า หรือไม่สามารถเพิ่มหน่วยความจำให้มากขึ้นต่างหาก จึงควรพิจารณาหาทางใช้การประกาศตัวแปรให้เกิดประโยชน์
เสียเวลาปรับปรุงตัดรหัส VBA ที่ไม่จำเป็น ทำให้สั้นกะทัดรัด
ประเด็นนี้คล้ายคลึงกับการเขียนประกาศตัวแปร แทนที่จะเสียเวลาเขียนประกาศตัวแปรซึ่งทำให้รหัสยาวขึ้น กลับมาเสียเวลาปรับปรุงรหัส ตัดรหัส VBA ที่ไม่จำเป็น เพียงแค่ทำให้ดูว่ารหัสสั้นกะทัดรัดขึ้น โดยไม่ได้ช่วยให้รหัสทำงานเร็วขึ้นจนถือได้ว่า ชดเชยคุ้มค่ากับเวลาที่เสียไปในการปรับปรุงรหัสให้สั้นลง
อยากใช้ VBA ให้คุ้มค่า ต้องคิดต้องทำอย่างไร
กฎเกณฑ์ต่อไปนี้เป็นเพียงความเห็นหนึ่ง อยากให้ถือเป็นเพียงคำแนะนำ ไม่ใช่กฎเกณฑ์ตายตัว หรือต้องบังคับใช้กับทุกคน ทั้งนี้ขึ้นกับสภาพแวดล้อมและสถานการณ์ของผู้ใช้ VBA ซึ่งมีความแตกต่างกันไปอีกด้วย
- อย่าคิดทำอะไรเกินตัว ตนมีความรู้ความสามารถระดับใด มีเวลาจำกัดแค่ไหน ให้ทำแค่นั้น เท่าที่ตนทำได้
- มุ่งทำงานให้เสร็จทันเวลา โดยไม่ต้องห่วงเรื่องความสมบูรณ์ของตัวรหัส ขนาดหน่วยความจำว่าสิ้นเปลืองอย่างไร หรือความเร็วของรหัส ต่อเมื่อมีเวลาเหลือพอ จึงย้อนกลับมาปรับปรุงรหัสให้สมบูรณ์
- เลือกใช้วิธีหาคำตอบที่เหมาะกับงานและผู้ใช้ ถ้าผู้ใช้งานร่วมกัน ไม่มีความรู้เรื่อง VBA ก็ไม่ควรใช้ VBA ให้เลือกใช้วิธีอื่นที่อาจเสร็จช้ากว่า มีขั้นตอนยาวกว่า แต่ไม่มีผลเสียหรือความเสี่ยงในระยะยาว
- VBA เหมาะกับงานที่มีขั้นตอนชัดเจนแน่นอนตายตัวแล้วเท่านั้น
- เรียนรู้ VBA จากการทดลองใช้งานง่ายๆ มีรหัสสั้นๆ แต่ต้องพยายามฝึกใช้บ่อยๆ เรียนรู้จากข้อผิดพลาดของตนเอง
- ควรเลือกใช้ VBA กับงานที่ต้องนำกลับมาใช้ซ้ำแล้วซ้ำอีก หรืองานที่มีขั้นตอนยุ่งยากสลับซับซ้อน จนผู้ปฏิบัติงานอาจเผลอทำงานผิดพลาด อย่าใช้ VBA กับงานที่ใช้เพียงครั้งเดียว
- พยายามใช้ Macro Recorder ช่วยสร้างรหัส VBA ให้มากที่สุดแทนการเขียนรหัสเอง
- จดบันทึกอธิบายการใช้ VBA ในแต่ละแฟ้มงาน แสดงรายละเอียดด้วยว่า ทำไมจึงเลือกใช้วิธีนั้น ทำไม่จึงไม่เลือกใช้วิธีอื่น
- ควรมีผู้ร่วมงานร่วมรับรู้การสร้าง VBA เพื่อเป็นตัวตายตัวแทน