Recently in มิตรภาพ Category
ในงานที่ผมใช้ VBA นั้น ผมจะใช้ไฟล์ๆหนึ่ง เป็นที่รวบรวม module ของทั้งระบบ ทำให้มี module รวมๆกันเป็นร้อยเลยทีเดียว ที่สำคัญ...ผมเขียนไป ทดลองไป แก้ไปเรื่อยๆ ขนาดไฟล์ก็เพิ่มขึ้นเรื่อยๆ จึงเรียกเปิดใช้งานได้ช้าลงเรื่อยๆอีกเช่นกัน มาดูวิธีแก้ไขกันครับ...
การแชร์ไฟล์เพื่อใช้งานหลายๆเครื่อง เมื่ออีกเครื่องหนึ่งจะเปิดใช้บ้าง ในขณะที่เครื่องแรกกำลังเปิดอยู่ จะมีข้อความเตือนขึ้นมา ก็ไม่เป็นปัญหามากนัก แต่บางครั้งเจ้าของไม่รู้ตัว แต่ไฟล์ค้างอยู่ข้างในเพราะถูกเปิดแบบซ่อน อันหลังนี่หายากมาก แต่เดิมแก้ปัญหาด้วยการให้พนักงานทั้งบริษัทออกจากเอ็กเซลแล้วค่อยเข้าใหม่ วันนี้เลยเข้าค้นข้อมูลในอินเตอร์เน็ต พบบทความประเภทนี้(ในภาษาอังกฤษ)เยอะมาก แต่ส่วนมากลึกซึ้งเกินภูมิปัญญาชาวบ้าน(อย่างผม)มาก จึงได้ทดลองเอาบางส่วนมาประยุกต์ใช้ ทดลองแล้วได้ผลดีทีเดียว
การจะสร้างตารางเพื่อบันทึกอะไรสักอย่างหนึ่ง สิ่งที่จะขาดไม่ได้เลย ก็คงจะเป็นคอลัมน์"ลำดับที่"นั่นเองครับ ลองดูตัวอย่างต่อไปนี้ครับ
เรื่องของเรื่องก็คือ ผมมีภาระกิจต้องสร้าง UserForm ขึ้นมา เพื่ออ่านค่าจากฐานข้อมูล มารอให้พนักงานได้เลือกใช้ เป็นการลดความผิดพลาด จากการพิมพ์ผิดพิมพ์ถูก หน้าตาก็ประมาณนี้ครับ
แต่ปัญหาก็คือ ความสูงของแต่ละบรรทัดในชีทงานก็แค่นิดเดียว คงจะแสดงรูปได้กระจิ๋วหริว หากจะใส่รูป 2 นิ้วสักรูป ก็ต้องขยายบรรทัดตามไปด้วย ตารางที่ได้คงไม่น่าดูเท่าไร
พอดีว่าต้องมีเรื่องค้นหา เกี่ยวกับ picture ใน excel ก็ใช้บริการของ google อีกนั่นละ มีข้อมูลต่างๆนาๆให้ศึกษามากมาย เลยหยิบมาวิธีนึง น่าสนใจมากครับ ลองตามมาดูกัน
ก่อนอื่น ไปดาวน์โหลดฟังก์ชั่นเสริมของ Excel มาจาก http://xcell05.free.fr/downloads/Morefunc.zip ก็จะได้ไฟล์ .rar มา 1 ไฟล์ เมื่อแตกไฟล์ออกมาก็จะพบกับไฟล์ setup.exe เมื่อติดตั้งเสร็จแล้ว ก็จะเข้าไปรวมกับฟังก์ชั่นเดิมของ Excel ไว้ให้เลือกใช้ได้ทันที รายละเอียดทั้งหมดของ Morefunc.zip สามารถค้นหาดูได้จากอินเตอร์เน็ตครับ มีข้อมูลมากมายทีเดียว แต่ที่ผมจะเอามาให้ดู เป็นฟังก์ชั่น indirect.ext ที่ใช้งานได้เหมือนกับ indirect ตัวเดิม แต่ตัวนี้มี .ext ต่อท้ายด้วย ซึ่งความแตกต่างก็คือ สามารถใช้งานกับ Workbook ที่ปิดอยู่ได้ด้วยครับ
เมื่อมีการออกแบบระบบงานต่างๆบน Excel โดยเฉพาะที่ต้องทำงานร่วมกับ VBA มักต้องมีการออกแบบเมนูเฉพาะงานนั้นๆขึ้นมาใหม่ ผมเองก็เช่นกันครับ เมนูที่ผมเคยใช้งานอยู่ จะออกแบบไว้ในลักษณะนี้ครับ
บังเอิญว่า ไปพบคำถามในบอร์ดพันทิปมา ว่าอยากได้งานประมาณว่า เมื่อพิมพ์ข้อมูลลงใน A1 ให้ B1 แสดงวันที่และเวลาขณะนั้นทันที และเมื่อพิมพ์ A2, A3, ... ก็ให้ B2, B3, ... แสดงเวลาจริงของแต่ละบรรทัดในทันที ผมคิดในใจว่า "หมูๆ" เลยเปิด Excel ขึ้นมา ที่ B1 พิมพ์สูตรนี้ลงไป
=IF(A1<>"",NOW(),"")
จากนั้นก็ปรับ Format ของ B1 ให้เป็น
d mm yyyy [$-1000000]h:mm:ss AM/PM;@
เพื่อการแสดงผลเป็น วันที่ เดือน ปี ชั่วโมง นาที วินาที เช้า/บ่าย เรียกว่าโกงเวลาไม่ได้แม้แต่วินาทีเดียวกันเลยเชียว...
โดยปกติแล้ว เราสามารถลดเวลาในการสร้างหัวตาราง หรือข้อความที่เป็นหัวกระดาษ ที่ต้องมีอยู่ในเอกสารในทุกๆหน้า ด้วยการสร้างในชีทงานเพียงครั้งเดียว แล้วสั่งให้พิมพ์ซ้ำในทุกๆหน้าด้วยเมนู "แฟ้ม/ตั้งค่าหน้ากระดาษ.../แผ่นงาน/แถวที่จะพิมพ์ซ้ำด้านบน" ซึ่งไม่ว่าจะเป็นข้อความ หรือตารางต่างๆ เอ็กเซลก็จะสามารถทำซ้ำให้เราได้ในทุกๆหน้า
ถ้าต้องการให้มีการพิมพ์ซ้ำด้านล่างในทุกๆหน้าล่ะ? ถ้าเป็นข้อความธรรมดาก็ง่ายขึ้นมาหน่อย แต่ถ้าต้องการมีตาราง มีเส้นกรอบติดไปด้วย อันนี้ต้องใช้วิธีพลิกแพลงสักเล็กน้อย...
