แฟ้มงานที่สร้างขึ้นบางแฟ้มของผม มีมูลค่าเป็นแสนเป็นล้านบาท แฟ้มของคุณก็มีราคามิใช่น้อยอาจจะแพงกว่าแฟ้มของผมเสียอีก ลองคิดถึงต้นทุนของการสร้างงานดูซิครับ คิดแค่ค่าของเวลาที่เสียไปตั้งแต่เริ่มสร้างแฟ้มขึ้นมาใช้งาน กว่าจะแก้ไขปรับปรุงให้ใช้งานได้ตามต้องการ ต้องเสียเวลาไปมิใช่น้อยเลยใช่ไหม บางแฟ้มใช้เวลาพัฒนาหลายปี ต้องใช้ทั้งประสบการณ์ทำงานและพื้นฐานความรู้ร้อยแปดกว่าจะได้แฟ้มที่ใช้งานได้ตามใจนึก
แล้วทราบกันไหมว่า แฟ้มที่คุณสร้างมากับมือนั้นน่ะ ตามกฎหมายถือว่าเป็นของใคร ใครเป็นเจ้าของตามกฎหมาย คุณเป็นเจ้าของ หรือบริษัทที่เป็นเจ้านายคุณเป็นเจ้าของ
ตามกฎหมายลิขสิทธิ์คอมพิวเตอร์ “ถ้าผู้สร้างแฟ้มเป็นลูกจ้าง ลูกจ้างเป็นเจ้าของ โดยผู้ว่าจ้างมีสิทธินำไปเผยแพร่ได้ เว้นแต่จะตกลงกันเป็นอย่างอื่น” กล่าวโดยย่อได้แบบนี้ (ต่างจากกรณีรับจ้างหรือข้าราชการพนักงานรัฐวิสาหกิจ ซึ่งผู้ว่าจ้างได้สิทธิเป็นเจ้าของ) และลิขสิทธิ์นั้นไม่ต้องเสียเวลาไปจดทะเบียนความเป็นเจ้าของกับใคร แค่คุณนำแฟ้มไปอวดให้คนอื่นเห็นก็ถือว่าเริ่มต้นความเป็นเจ้าของได้แล้ว แต่ถ้าคุณไปลงนามในสัญญาจ้างงานให้ยกสิทธิในแฟ้มที่สร้างขึ้นด้วยคอมพิวเตอร์ให้กับบริษัทผู้ว่าจ้างไปแล้ว หากคุณลาออกไป คุณจะไม่มีสิทธิ์นำแฟ้มที่คุณสร้างเองกับมือนั้นไปใช้ต่อได้อีก เพราะคุณได้ยกแฟ้มงานที่ถือว่าเป็นทรัพย์สินทางปัญญาให้เขาไปแล้ว ดังนั้นในสัญญาจ้างงานที่ดี บริษัทและลูกจ้างควรรักษาน้ำใจซึ่งกันและกันโดยระบุในสัญญาจ้างงานไว้ว่า “พนักงานยอมให้บริษัทผู้ว่าจ้างมีสิทธิ์เป็นเจ้าของร่วมกับพนักงาน”
ถ้าคุณเป็นเจ้านายหรือเป็นเจ้าของบริษัท อาจเถียงว่าแฟ้มของพนักงานก็ต้องให้บริษัทเป็นเจ้าของ เพราะบริษัทได้ลงทุนซื้อเครื่องคอมพิวเตอร์และโปรแกรม Excel มาให้ บริษัทอุตส่าห์ลงทุนลงแรงส่งคนไปอบรมพัฒนาความรู้ เงินเดือนก็จ่ายไปแล้ว ลูกจ้างจะเอาอะไรอีก โปรแกรม Excel มันก็คำนวณให้เองอยู่แล้วไม่ใช่หรือ ไม่เห็นจะเข้าข่ายกฎหมายลิขสิทธิ์อะไรนี่เลย ... ถ้าบริษัทใดคิดกันแบบนี้ แสดงว่าไม่เคยทราบว่าแต่ละแฟ้มที่ใช้งานกันทุกวันนั้น พนักงานเขาเหนื่อยยากแสนเข็นในการคิดแก้ไขปรับปรุงกันมาขนาดไหน
ในด้านของพนักงานผู้สร้างแฟ้มขึ้นมา แม้จะใส่รหัส Protect Sheet และ Protect Workbook เพื่อป้องกันไม่ให้คนอื่นมาใช้แฟ้มได้ก็ตาม คนอื่นก็ยังสามารถใช้โปรแกรมถอดรหัสในแฟ้มได้เสียอีก และโปรแกรมถอดรหัสแฟ้ม Excel นี้ก็หาได้ไม่ยาก มีคนสร้างแจกฟรีให้หามาใช้กันได้ทางอินเตอร์เน็ต
หลายครั้งที่เจอลูกศิษย์ที่เข้าอบรมกับผมมาเล่าให้ฟังว่า หัวหน้าฝากให้ผมช่วยดูแฟ้มนี้ให้หน่อย ทำไมบางวันมันก็คำนวณถูกต้อง แต่บางวันมันก็คำนวณผิดเพี้ยนไปเป็นล้านหลายล้านก็มี เดิมทีแฟ้มนี้ทำงานถูกต้องมาตลอด แต่เมื่อคนสร้างแฟ้มลาออกไปแล้วเพื่อนๆเอาแฟ้มนี้มาใช้ต่อ พอไปลบชื่อคนสร้างเดิมที่เขาพิมพ์ไว้ในชีท ตั้งแต่นั้นมาแฟ้มนี้ก็คำนวณรวนเรื่อยมา
ผมเชื่อว่าคุณต้องมีแฟ้มที่เป็นมรดกตกทอดจากเพื่อนร่วมงานสืบต่อกันมาหลายรุ่น แล้วเชื่อได้อีกว่าคุณไม่เคยเสียเวลาย้อนกลับไปตรวจสอบความถูกต้องของสูตรที่มีอยู่ให้ครบทั้งหมดทุกเซลล์ในตารางหรอกใช่ไหม ลองคิดดูซิว่า เวลาที่เขาลาออกกันไป มีใครบ้างที่ลาออกเพราะคิดอยากทำงานในบริษัทเดิมต่อไปบ้าง เป็นไปได้ไหมที่เขาอาจสร้างสูตรไว้ให้ทำงานถูกต้องตามเดิมไปสักพักให้คนใช้งานตายใจ แต่พอพ้นหกเดือนไปแล้วพอเปิดแฟ้มนั้นขึ้นมาตัวเลขผลลัพธ์จะคำนวณผิดเพี้ยนไปจากเดิมก็ได้
แนวทางการป้องกันแฟ้มเพื่อทำให้คนอื่นนำไปใช้ต่อไม่ได้
- เมื่อสร้างงานเสร็จแล้ว ก่อนจะส่งแฟ้มให้คนอื่น ให้ทำลายเครื่องหมาย $ ที่ใช้ในสูตรทั้งหมดทิ้งไป โดยสั่ง Replace เครื่องหมาย $ แล้วไม่ต้องใช้เครื่องหมายอื่นใดแทน ส่งผลให้สูตรที่ไม่มีเครื่องหมาย $ กำกับไว้ ไม่สามารถ copy นำไปใช้ต่อที่เซลล์อื่นได้เลยเพราะตำแหน่งอ้างอิงจะเขยื้อนต่างไปจากตำแหน่งเดิม
- กำหนดรหัสป้องกันให้มีซับซ้อนเพื่อทำให้โปรแกรมถอดรหัสต้องใช้เวลานานมากจนคนทนรอโปรแกรมถอดรหัสให้เสร็จไม่ไหว โดยเลือกใช้รหัสที่ยาวที่สุด อาจใช้รหัสเป็นประโยคข้อความ ผสมตัวเลขตัวอักษร ใช้อักษรตัวใหญ่ผสมตัวเล็ก มีช่องว่างด้านหน้าหรือต่อท้ายด้วยสัญลักษณ์ เช่น B1g bRother |$ alw4ys riGHt!? ซึ่งใช้แบบย่อลงมาก็ได้เป็นรหัส BBslwys90!
- ทำให้ดูเหมือนเป็นชีทว่างที่ไม่มีข้อมูลใดๆหรือกลายเป็นข้อมูลอื่น เพื่อหลอกให้คนที่เปิดดูไม่เฉลียวใจ
- เปลี่ยนสี Font ให้กลืนกับสีของ Background
- นำรูปภาพตารางว่างๆมาซ้อนทับ หรือ ใช้รูปภาพที่ลิงค์ค่าจากเซลล์อื่นมาซ้อนทับ โดยสั่ง Copy แล้วสั่ง Paste แบบ Linked Picture (Excel 2003 ก่อนที่จะ Paste ต้องกดปุ่ม Shift ค้างไว้แล้วคลิกเมนู Edit > Paste Picture Link)
- กำหนด Format Cells ให้ใช้ ;;; เพื่อเลิกการใช้รูปแบบใดๆในการแสดงตัวเลขและตัวอักษรให้ปรากฏในชีท
- กำหนด Format Cells > Protection > Hidden เพื่อทำให้เลิกการแสดงค่าให้เห็นในช่อง Formula Bar และจะไม่สามารถ Copy สูตรออกไปใช้ต่อที่ชีทอื่นได้เลย ทั้งนี้ต้องใช้ร่วมกับการสั่ง Protect Sheet ด้วยจึงจะเกิดผล
- ใช้สูตร Indirect ที่ใช้ Text ที่บอกตำแหน่งอ้างอิงค่าจากเซลล์มาใช้แทนที่จะใช้สูตรลิงค์โดยตรง จะทำให้การ Insert หรือ ย้ายตารางไปที่อื่นไม่ทำให้สูตรปรับตำแหน่งตามไปด้วย เช่น =Indirect(“A1”) จะยังคงดึงค่าจากเซลล์เดิมคือ A1 ไม่ว่าเราจะย้ายเซลล์ A1 ไปที่อื่นแล้วก็ตาม
- ให้สร้างสูตรยาวๆที่ยากต่อการแกะ แม้เจ้าของแฟ้มเองก็ยังแกะไม่ออก
- หากต้องการให้สูตรเดิมทำงานได้จนถึงสิ้นปี 2022 ให้เปลี่ยนสูตรเดิมที่ใช้เป็นสูตร
=IF( Today()<= 44926, สูตรเดิม, สูตรอื่น) โดยตัวเลข 44926 นี้หมายถึง Date Serial Number ของวันที่ 31/12/2022 ซึ่งจะเปลี่ยนเป็นค่าของวันสุดท้ายอื่นใดก็ได้ตามใจชอบ - ทำรั้วไฟฟ้าที่มองไม่เห็นป้องกันไม่ให้ Insert แทรกระหว่างพื้นที่ที่ต้องการ โดยสร้างสูตร Array แบบสร้างพร้อมกันทีเดียวลงไปในแนวรั้ว เช่น ให้เลือกเซลล์ A1:A10 แล้วพิมพ์ =“” จากนั้นกดปุ่ม Ctrl+Shift+Enter จะเกิดสูตร Array {=“”} พร้อมกัน แล้วจะพบว่าจะไม่สามารถ Insert Row แทรกระหว่าง Row 1 – 10 ได้ต่อไป
- ถ้าแฟ้มนั้นมีการใช้ VBA ประกอบร่วมอยู่ด้วย ให้สร้างสูตรที่เป็นสูตร Function VBA เพื่อคำนวณร่วมกับสูตรสำคัญไว้เสมอเพื่อบังคับให้ผู้ใช้ต้อง Enable Macro เพื่อยอมให้ Macro ทำงานทุกครั้งเมื่อเปิดแฟ้มนั้นขึ้นมาใช้งาน แต่ถ้า Disable Macro สูตรที่เป็น Function VBA ก็จะไม่ทำงานแล้วส่งผลให้สูตรอื่นที่เคยคำนวณร่วมกันไม่ทำงานตามไปด้วย
- ซ่อนชีทแบบ VeryHidden โดยใช้คำสั่ง ActiveSheet.Visible = xlVeryHidden ใน VBA จะทำให้ไม่สามารถใช้คำสั่งใน Excel เพื่อ Unhide ชีทกลับมาให้เห็นตามเดิม
- ในรหัส VBA ให้ใช้ตำแหน่งอ้างอิงที่อ้างถึงชื่อชีท ชื่อแฟ้ม หรือตำแหน่งเซลล์ที่ตายตัว ทำให้เมื่อใดที่มีการเปลี่ยนชื่อชีทหรือชื่อแฟ้ม หรือมีการย้ายเซลล์ไปที่อื่น จะส่งผลให้รหัส VBA หาตำแหน่งเซลล์ที่ต้องการไม่พบ
ทั้ง 10 ข้อนี้เป็นเพียงบางวิธีที่พบเห็นว่ามีการใช้กัน เมื่อใดที่คุณนำไปใช้ ขอให้จดจำไว้ด้วยว่าได้ใช้วิธีใดไปบ้าง มิฉะนั้นแล้วคุณเองนั่นแหละที่จะใช้แฟ้มของตัวเองต่อไปไม่ได้ และหวังว่าจะไม่นำไปใช้สร้างปัญหาให้กับผู้อื่น ทำให้เกิดเป็นเวรเป็นกรรมต้องกลับมาชดใช้กรรมระหว่างกันต่อไปอีก