สำหรับเวอร์ชัน Microsoft Excel ๙๗ของบทความนี้ให้ดูที่๑๕๗๓๔๖สำหรับเวอร์ชัน Microsoft Excel ๙๘ของบทความนี้ให้ดูที่๑๘๒๔๘๒
อาการ
ใน Microsoft Office Excel, โค้ดแมโคร Microsoft Visual Basic สำหรับแอปพลิเคชัน (VBA) ที่มีอยู่ "ด้านหลัง" เวิร์กชีตหรือเวิร์กบุ๊กอาจทำงานไม่ถูกต้อง
สาเหตุ
การดำเนินการนี้จะเกิดขึ้นถ้าเงื่อนไขต่อไปนี้ทั้งสองเป็นจริง:
-
โค้ดในคำถามมีอยู่ภายใน subroutine ที่ทำงานโดยอัตโนมัติเช่น Auto_Open หรือ Auto_Close subroutine
-
โค้ดไม่มีอยู่ในโมดูลของ Visual Basic แต่ "อยู่ด้านหลัง" เวิร์กชีตหรือเวิร์กบุ๊กเอง
วิธีแก้ไขปัญหาชั่วคราว
เมื่อต้องการทำงาน subroutines โดยอัตโนมัติเพื่อให้สามารถทำงานได้อย่างถูกต้องใน Microsoft Excel จะต้องมีอยู่ภายในโมดูลของ Visual Basic คุณต้องแทรกโมดูลของ Visual Basic ลงในเวิร์กบุ๊กแล้ววางโค้ดในโมดูลใหม่ เมื่อต้องการแทรกโมดูลของ Visual Basic:
-
ใน Project Explorer ใน Visual Basic Editor ให้เปิดใช้งานเวิร์กบุ๊กที่มีโค้ดในคำถาม
-
ในเมนู แทรก คลิก มอดูล
หลังจากที่มีการแทรกโมดูลใหม่แล้วให้ตัดโค้ดจากตำแหน่งที่ตั้งเดิมแล้ววางลงในโมดูลของ Visual Basic จากนั้นให้บันทึกเวิร์กบุ๊ก
ข้อมูลเพิ่มเติม
ใน Excel, โค้ด VBA สามารถจัดเก็บไว้ในตำแหน่งที่ตั้งที่แตกต่างกันสามตำแหน่งดังนี้ในโมดูลคลา visual basic ในโมดูลคลา Visual Basic และ "อยู่ด้านหลัง" เวิร์กชีตและเวิร์กบุ๊ก เมื่อต้องการแก้ไขรหัส "ด้านหลัง" เวิร์กชีตหรือเวิร์กบุ๊กให้ทำดังนี้
-
เปิดใช้งาน Visual Basic Editor (กด ALT + F11)
-
ในหน้าต่าง Project Explorer คุณจะเห็นรายการที่คล้ายกับข้อความต่อไปนี้:
VBAProject (Book1) Microsoft Excel Objects Sheet1 (Sheet1) Sheet2 (Sheet2) Sheet3 (Sheet3) ThisWorkbook Modules Module1
ถ้าคุณดับเบิลคลิกที่ชื่อแผ่นงานหรือ ThisWorkbookหนึ่งรายการคุณสามารถพิมพ์โค้ดในหน้าต่างรหัสได้ โค้ดดังกล่าวไม่อยู่ภายในโมดูลของ Visual Basic จะถือว่าเป็น "อยู่ด้านหลัง" เวิร์กชีตหรือThisWorkbook ถ้า Auto_OpenAuto_Closeหรือ subroutine ที่ กำลังทำงานอยู่โดยอัตโนมัติ จะถูกเก็บไว้ที่ "อยู่ด้านหลัง" เวิร์กชีตหรือ ThisWorkbookอาจทำงานไม่ถูกต้องเมื่อคุณเปิดหรือปิดเวิร์กบุ๊กของคุณหรือเมื่อคุณดำเนินการกระทำที่ควรทำให้ subroutine ทำงาน