คำสั่ง Workbook_Open, Workbook_BeforeClose, Workbook_BeforeSave เป็นคำสั่งที่มีอยู่แล้วใน Excel ทุกเวอร์ชั่นครับ เทคนิคการใช้งานก็มีให้ค้นหาอ่านกันได้โดยทั่วไป ผมเองก็ได้นำมาใช้งานด้วยเช่นกัน แต่มีการดัดแปลงให้เหมาะสมกับงานอีกทีครับเมื่อผมได้รับมอบหมายให้สร้างงานอะไรขึ้นมาสักอย่าง หลังจากที่สร้างเสร็จและพร้อมใช้งาน สิ่งที่ผมจะต้องทำมี 2 เรื่องสำคัญพูดคุยสื่อสารกับพนักงานก่อนเสมอ ว่า Excel ก็คือ Excel ใครๆก็สามารถใช้งานได้ แก้ไขได้ ดัดแปลงได้ ใครมีข้อเสนอใดๆสามารถเสนอเข้ามาได้เลย ยินดีรับฟัง ยินดีปรับปรุงเปลี่ยนแปลงให้ตรงกับการใช้งาน ขออย่างเดียว อย่าทำโดยพละการ ขอให้แจ้งผมก่อนเสมอเขียนโค้ดคำสั่ง Workbook_Open, Workbook_BeforeClose, Workbook_BeforeSave เหล่านี้ รวมไปถึงการตั้งระหัสผ่านให้กับ VBA เพื่อป้องกันหน้าเขียนโค้ดไว้เป็นเบื้องต้นข้อ 1 นั้นสำคัญสุดครับ ก็นับว่าโชคดีของผมอย่างหนึ่ง ที่ยังไม่เคยมีพนักงานคนไหนนอกลู่นอกทางเลย ยิ่งไปกว่านั้น ผมเองอยากจะหาคนมาช่วยเขียน VBA สักคน ก็คงยังไม่มีพนักงานคนไหนยกมือขึ้นเลย พากันบอกว่ายากแล้วก็จากไป...อาจจะมีคนสงสัยว่า แล้วผมให้บันทึกข้อมูลที่ทำงานกันทุกวันอย่างไร คำตอบก็คือ ผมสร้างปุ่มให้บันทึกงาน ตามที่ผมเขียนไว้ในบทความ สร้างปุ่มกดแบบไม่มีปุ่มใน Worksheet (Create button in worksheet) แล้วไปบันทึกไว้ที่อื่นครับ ไฟล์ที่ใช้ทำงานจึงเปรียบเสมือนเป็นทางผ่าน หรือ Interface เพื่อส่งผ่านข้อมูลเฉยๆครับตอนนี้มาไล่เรียงคำสั่งที่ผมใช้กันก่อนครับ คำสั่งเหล่านี้อยู่ในหน้าเขียนโค้ดของ ThisWorkbook นะครับ ไม่ใช่หน้า Module ซึ่งชื่อ Private Sub ต่างๆนั้นจะไม่ต้องเขียนขึ้นมา แต่ใช้วิธีเรียกขึ้นมาใช้เลย Excel เป็นผู้กำหนดไว้ให้แล้วครับ ส่วนที่มีคำว่า Private นำหน้านั้น เป็นการทำให้ชื่อคำสั่งเหล่านี้ ไม่ปรากฏให้เรียกใช้งานครับผมจะยกตัวอย่างอ้างอิงไปถึงบทความเรื่อง สร้างปุ่มกดแบบไม่มีปุ่มใน Worksheet (Create button in worksheet) โดยใช้ไฟล์ของการสร้างปุ่มมาเป็นตัวอย่างนะครับ ทบทวนอีกทีว่า คำสั่งเหล่านี้ ผมไม่ได้ตั้งชื่อคำสั่งเอง แต่ไป Doubleclick ที่คำว่า ThisWorkbook ทางด้านซ้าย จากนั้นไปคลิกเลือกคำว่า Workbook ในช่องกลาง แล้วจึงไปเลือกคำสั่งต่างๆในช่องขวาสุดอีกทีนะครับWorkbook_Openคำสั่งที่อยู่ภายใน Sub นี้ จะทำงานในขณะที่ไฟล์กำลังเปิดขึ้นมา สิ่งที่ผมต้องการก็คือ ให้สร้างเมนูสำหรับคลิกเพื่อสร้างปุ่มมารอไว้เลย ผมจึงพิมพ์ชื่อคำสั่ง CreateCustomMenu เอาไว้ในนี้ครับWorkbook_BeforeCloseคำสั่งนี้จะทำงานในขณะที่ไฟล์กำลังจะปิดลง สิ่งที่ผมต้องการก็คือ2.1 ล้างเมนู Add-Ins ที่เอาไว้คลิกสร้างปุ่มออกไป เพราะถ้าไม่เอาออก ใครมาเปิด Excel ทำงานก็จะยังพบกับเมนูนี้อยู่ คำสั่งตรงนี้ก็คือApplication.CommandBars.FindControl(ID:=30002).Reset2.2 อาจจะมีผู้ใช้งานบางคน เผลอไปลบนั่นแทรกนี่ หรือไปพิมพ์อะไรไว้ในไฟล์ หากมีการเปลี่ยนแปลงอะไรในไฟล์แม้แต่นิดเดียว ในขณะที่ปิดไฟล์ Excel จะขึ้นข้อความเตือนให้บันทึกการเปลี่ยนแปลงทันทีแต่ผมไม่ต้องการแบบนี้ครับ ผมต้องการให้ปิดไฟล์ไปแบบเงียบๆ ไม่ต้องเตือนให้บันทึกอะไรทั้งสิ้น โดยใช้คำสั่งนี้ครับThisWorkbook.Saved = Trueความหมายก็ตรงตัวครับ คือบอก Excel ว่า ไฟล์นี้ถูกบันทึกไปแล้วนะ Excel ก็เชื่อ โดยที่ไม่ถามและไม่บันทึกอะไรเลยครับWorkbook_BeforeSaveคำสั่งนี้จะทำงานกับการกดปุ่ม Save และ Save As รวมไปถึงการคลิกที่รูปแผ่นดิสก์และการกดคีย์ลัด Ctrl+s อย่างที่เคยบอกนั่นละครับ ผู้ใช้งานบางคนอาจเผลอเรอคลิกโน่นนั่นนี่ แต่บางคนตั้งใจกดบันทึกเลย แถมบางคนที่ชำนาญหน่อยก็อาจจะบันทึกแบบเปลี่ยนชื่อไปเลย เหล่านี้ผมก็ไม่ต้องการครับ ผมจึงต้องใส่คำสั่งนี้ลงไปCancel = Trueสั้นๆแค่นี้เอง แต่ทรงอานุภาพมากมาย เป็นการบอก Excel ว่า อะไรก็ตามที่เกี่ยวกับการ Save ให้ยกเลิกทั้งหมด สรุปว่า ไฟล์นี้บันทึกไม่ได้แน่นอนครับ จากข้อ 3 เรียบร้อยเลยครับ ได้ผลเกินคาด เพราะแม้แต่ผมเองก็บันทึกอะไรไม่ได้ บางวันเขียนโค้ดหลายสิบบรรทัด เผลอกด x ที่มุมขวาบนของ Excel ทีเดียว ก็คือไม่เหลือให้ผมแม้แต่คำเดียว (แถมเวลาเขียนใหม่ บางทีไม่เหมือนเดิมเสียด้วย) ที่ Module2 ผมได้เขียนคำสั่งต่อไปนี้ไว้ครับSub AdminSave() Application.EnableEvents = False ThisWorkbook.Save Application.EnableEvents = TrueEnd Subคำสั่ง Application.EnableEvents = False จะสั่งให้ Excel ยกเลิกกิจกรรมใดๆทั้งหมด รวมไปถึงการที่ผมสั่ง Cancel=True ไว้ที่ BeforeSave ด้วย ถัดมาก็เป็นการสั่งให้ Save ไฟล์นี้ แล้วตามด้วยการเปิดให้ Excel ตรวจสอบกิจกรรมต่างๆให้เหมือนเดิม นำคำสั่ง AdminSave ไปใส่ไว้ในคำสั่งสร้างเมนู เพื่อเอาไว้คลิกบันทึกได้ง่ายๆ ดังรูปข้างล่างนี้ครับหลังจากสั่งรันคำสั่ง AdminSave สักครั้งก่อน เมื่อปิดไฟล์แล้วเปิดขึ้นมาใหม่ จะได้เมนูเพิ่มมาแบบนี้ครับไหนๆก็ไหนๆแล้ว อดตาหลับขับตานอนมาค่อนคืน จะให้ใครเข้ามาดูโค้ดง่ายๆได้ยังไง หรือใครจับพลัดจับผลูไปเคาะ Spacebar หรือกด Enter เข้าที่บรรทัดใดบรรทัดหนึ่ง งานก็จะผิดเพี้ยนไปในทันทีที่หน้าเขียนโค้ด ไปที่เมนู Tools เลือกคำสั่ง VBAProject Properties... จะแสดงกรอบกำหนดค่าขึ้นมา ให้- เลือกไปที่แถบ Protection- "ติ๊ก"เครื่องหมาย"ถูก"ที่คำว่า Lock project to viewing- พิมพ์ Password ทั้ง 2 ช่องให้ตรงกัน และย้ำว่า จำให้ได้ด้วยนะครับ หรือไม่ก็ต้องบันทึกไว้ในที่ปลอดภัยจากนั้นก็ตอบตกลง และรันคำสั่ง AdminSave สักครั้งหนึ่งเมื่อมาตั้งรหัสผ่านตรงนี้แล้ว การกด Alt+F11 จะถามรหัสผ่านทุกครั้ง ตอบไม่ถูกก็เข้าไม่ได้ครับ ระวังไว้อย่างหนึ่งก็คือ หากการรันคำสั่งใดๆมี Error เกิดขึ้น Excel ก็จะเงียบเฉย ไม่แสดงข้อความใดๆให้เห็น ดังนั้น การใช้วิธีในข้อ 6 นี้ ผมจะใช้ก็ต่อเมื่อเป็นงานที่เรียบร้อยสมบูรณ์แล้วเท่านั้นครับสรุปจบทั้งหมดนี้ การพูดคุยกับพนักงาน เรื่องการทำงานกับ Excel ที่ผมประยุกต์ขึ้นมาให้ทำงานกันนี้ ถือเป็นสิ่งที่สำคัญสุดครับ ส่วนการเขียนหรือเรียกใช้คำสั่งป้องกันต่างๆเหล่านี้ เป็นเรื่องที่รองลงมา เป็นการอำนวยความสะดวกและป้องกันความพลั้งเผลอมากกว่าครับ สวัสดีครับผม เปิดประสบการณ์ความบันเทิงที่หลากหลายสุดปัง บน App TrueID โหลดเลย ฟรี !