Visual Basic for Applications (VBA) เป็นการนำภาษาการเขียนโปรแกรม Visual Basic ของ Microsoft ไปใช้งาน VBA สามารถใช้สำหรับเปิดใช้งาน UDFs, ทำงานอัตโนมัติ และเข้าถึง WinAPI ผ่าน DLLs อย่างไรก็ตาม ไม่กี่วันมานี้ มีรายงานมามากที่ผู้ใช้ไม่สามารถรันคำสั่งบางอย่างได้ และข้อผิดพลาด "Subscript Out of Range, Error 9" ปรากฏขึ้นขณะพยายามทำเช่นนั้น
สาเหตุของข้อผิดพลาด "Subscript Out of Range" ใน VBA
หลังจากได้รับรายงานจากผู้ใช้หลายราย เราตัดสินใจสืบสวนปัญหาและคิดค้นชุดวิธีแก้ไขเพื่อแก้ไขอย่างสมบูรณ์ นอกจากนี้ เรายังดูเหตุผลที่ทำให้เกิดข้อผิดพลาดนี้และรายการไว้ดังนี้
- องค์ประกอบที่ไม่มีอยู่ (Non-Existing Element): ในบางกรณี อาจเป็นไปได้ว่าคุณอ้างอิงองค์ประกอบในคำสั่งที่ไม่มีอยู่จริง อาจเป็นไปได้ว่า subscript มีขนาดใหญ่หรือเล็กกว่าช่วงของ subscripts ที่เป็นไปได้ หรือมิติอาจยังไม่ได้ถูกกำหนดให้กับอาเรย์ที่จุดนี้ในแอปพลิเคชัน
- องค์ประกอบที่ไม่ได้กำหนด (Undefined Elements): อาจเป็นไปได้ว่าคุณไม่ได้ระบุจำนวนองค์ประกอบในโค้ดของคุณ สิ่งสำคัญคือ จำนวนองค์ประกอบในอาเรย์ต้องถูกกำหนดโดยใช้คำสั่ง "Dim" หรือ "ReDim"
- สมาชิกคอลเลกชันไม่ถูกต้อง (Incorrect Collection Member): ในบางกรณี ผู้ใช้อาจอ้างอิงสมาชิกคอลเลกชันที่ไม่มีอยู่ หากอ้างอิงสมาชิกคอลเลกชันไม่ถูกต้อง ข้อผิดพลาดนี้อาจถูกกระตุ้น
- สคริปต์ย่อ (Shorthand Script): อาจเป็นไปได้ว่าคุณใช้รูปแบบย่อของ subscript และมันระบุองค์ประกอบที่ไม่ถูกต้องโดยนัย สิ่งสำคัญคือต้องใช้ชื่อคีย์ที่ถูกต้อง
ตอนนี้คุณมีความเข้าใจพื้นฐานเกี่ยวกับลักษณะของปัญหาแล้ว เราจะไปสู่วิธีแก้ไข โปรดนำไปปฏิบัติในลำดับเฉพาะที่นำเสนอเพื่อหลีกเลี่ยงความขัดแย้ง
วิธีแก้ไขที่ 1: ตรวจสอบอาเรย์ (Arrays)
อาจเป็นไปได้ว่าคุณกำหนดค่าที่ไม่ถูกต้องสำหรับองค์ประกอบอาเรย์ ดังนั้น แนะนำให้ตรวจสอบค่าที่คุณกำหนดสำหรับองค์ประกอบอาเรย์ซ้ำ และตรวจสอบให้แน่ใจว่ามันถูกต้อง นอกจากนี้ ให้ตรวจสอบการประกาศของอาเรย์และ ตรวจสอบ ขอบเขตบนและล่าง หากอาเรย์ถูกเปลี่ยนขนาดใหม่ ให้แน่ใจว่าใช้ฟังก์ชัน LBound และ UBound เพื่อเข้าถึงเงื่อนไข ตรวจสอบการสะกดชื่อตัวแปร หากดัชนีเป็นตัวแปร
วิธีแก้ไขที่ 2: ระบุจำนวนองค์ประกอบ
ในบางกรณี อาจเป็นไปได้ว่าคุณอาจไม่ได้กำหนดจำนวนองค์ประกอบในโค้ดของคุณ ซึ่งทำให้ข้อผิดพลาดถูกกระตุ้น แนะนำให้คุณระบุจำนวนองค์ประกอบในอาเรย์โดยใช้ฟังก์ชัน Dim หรือ ReDim
วิธีแก้ไขที่ 3: เปลี่ยนโครงสร้าง (Construct)
ข้อผิดพลาดนี้มักถูกกระตุ้นเมื่อผู้ใช้ระบุสมาชิกคอลเลกชันที่ไม่ถูกต้องหรือไม่มีอยู่ ดังนั้น แทนที่จะระบุองค์ประกอบดัชนี แนะนำให้คุณเข้าถึงด้วยโครงสร้าง "For Each...Next"
วิธีแก้ไขที่ 4: ตรวจสอบ Keyname และ Index
ในบางกรณี อาจเป็นไปได้ว่าคุณอาจใช้รูปแบบย่อของ subscript และมันระบุองค์ประกอบที่ไม่ถูกต้อง ดังนั้น แนะนำให้คุณใช้ คีย์ ชื่อ และ ดัชนี ที่ถูกต้องสำหรับคอลเลกชัน