โค้ด VBA "ที่อยู่ด้านหลัง" เวิร์กชีตหรือเวิร์กบุ๊กอาจไม่ทำงานใน Excel


สำหรับเวอร์ชัน 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:
  1. ใน Project Explorer ใน Visual Basic Editor ให้เปิดใช้งานเวิร์กบุ๊กที่มีโค้ดในคำถาม
  2. ในเมนู แทรก คลิก มอดูล
หลังจากที่มีการแทรกโมดูลใหม่แล้วให้ตัดโค้ดจากตำแหน่งที่ตั้งเดิมแล้ววางลงในโมดูลของ Visual Basic จากนั้นให้บันทึกเวิร์กบุ๊ก

ข้อมูลเพิ่มเติม


ใน Excel, โค้ด VBA สามารถจัดเก็บไว้ในตำแหน่งที่ตั้งที่แตกต่างกันสามตำแหน่งดังนี้ในโมดูลคลา visual basic ในโมดูลคลา Visual Basic และ "อยู่ด้านหลัง" เวิร์กชีตและเวิร์กบุ๊ก เมื่อต้องการแก้ไขรหัส "ด้านหลัง" เวิร์กชีตหรือเวิร์กบุ๊กให้ทำดังนี้
  1. เปิดใช้งาน Visual Basic Editor (กด ALT + F11)
  2. ในหน้าต่าง 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 ทำงาน