ตัวแปรและค่าคงที่ใน VBA

ใน VBA เช่นเดียวกับในภาษาการเขียนโปรแกรมอื่นๆ ตัวแปรและค่าคงที่ถูกใช้เพื่อเก็บค่าใดๆ ตามความหมายของชื่อ ตัวแปรสามารถเปลี่ยนแปลงได้ ในขณะที่ค่าคงที่เก็บค่าคงที่

ตัวอย่างเช่น ค่าคงที่ Pi เก็บค่าได้ 3,14159265… หมายเลข “Pi” จะไม่เปลี่ยนแปลงระหว่างการใช้งานโปรแกรม แต่ก็ยังสะดวกกว่าในการจัดเก็บค่าดังกล่าวเป็นค่าคงที่

ในขณะเดียวกัน เราก็สามารถใช้ตัวแปรได้ sVAT_อัตรา เพื่อจัดเก็บอัตราภาษีมูลค่าเพิ่มสำหรับสินค้าที่ซื้อ ค่าตัวแปร sVAT_อัตรา อาจแตกต่างกันไปขึ้นอยู่กับผลิตภัณฑ์ที่ซื้อ

ประเภทข้อมูล

ตัวแปรและค่าคงที่ทั้งหมดเป็นประเภทข้อมูลเฉพาะ ตารางด้านล่างแสดงรายการประเภทข้อมูลที่ใช้ใน VBA พร้อมคำอธิบายและช่วงของค่าที่เป็นไปได้:

ประเภทข้อมูล ขนาดรายละเอียดช่วงของค่า
byteไบต์ 1จำนวนเต็มบวก มักใช้สำหรับข้อมูลไบนารีจาก 0 ไป 255
บูลีนไบต์ 2จริงหรือเท็จก็ได้จริงหรือเท็จ
จำนวนเต็มไบต์ 2จำนวนเต็ม (ไม่มีเศษส่วน)จาก -32 ถึง +768
นานไบต์ 4จำนวนเต็มขนาดใหญ่ (ไม่มีเศษส่วน)от -2 147 483 648 до +2 147 483 647
เดียวไบต์ 4เลขทศนิยมความแม่นยำเดียวจาก -3.4e38 ถึง +3.4e38
สองไบต์ 8เลขทศนิยมความแม่นยำสองเท่าจาก -1.8e308 ถึง +1.8e308
เงินตราไบต์ 8เลขทศนิยมที่มีจำนวนทศนิยมคงที่от -922 337 203 685 477.5808 до +922 337 203 685 477.5807
วันที่ไบต์ 8วันที่และเวลา – ข้อมูลประเภท วันที่ จะแสดงด้วยตัวเลขทศนิยม ส่วนจำนวนเต็มของตัวเลขนี้แสดงวันที่ และส่วนที่เป็นเศษส่วนแสดงเวลาตั้งแต่วันที่ 1 มกราคม 100 ถึง 31 ธันวาคม 9999
วัตถุไบต์ 4การอ้างอิงวัตถุการอ้างอิงวัตถุใด ๆ
เชือกกำลังเปลี่ยนแปลงชุดตัวอักษร. ประเภทสตริงสามารถมีความยาวคงที่หรือแปรผันได้ มักใช้กับตัวแปรความยาวความยาวคงที่ – สูงสุดประมาณ 65 อักขระ ความยาวตัวแปร – มากถึงประมาณ 500 พันล้านอักขระ
ตัวแปรกำลังเปลี่ยนแปลงอาจมีวันที่ ทุ่น หรือสตริงอักขระ ประเภทนี้ใช้ในกรณีที่ไม่ทราบล่วงหน้าว่าจะป้อนข้อมูลประเภทใดตัวเลข – สองเท่า, สตริง – สตริง

เห็นได้ชัดว่าการใช้ตารางด้านบนและเลือกประเภทข้อมูลที่ถูกต้องทำให้คุณสามารถใช้หน่วยความจำได้อย่างประหยัดมากขึ้น (เช่น เลือกประเภทข้อมูล จำนวนเต็ม แทน นาน or เดียว แทน สอง). อย่างไรก็ตาม เมื่อใช้ประเภทข้อมูลที่มีขนาดกะทัดรัดมากขึ้น คุณต้องระวังว่าโค้ดของคุณจะไม่พยายามใส่ค่าขนาดใหญ่ที่ไม่สมส่วนเข้าไป

การประกาศตัวแปรและค่าคงที่

หมายเหตุนักแปล: การพูดเกี่ยวกับตัวแปรใน VBA เป็นเรื่องที่ควรค่าแก่การกล่าวถึงประเด็นที่สำคัญอีกประการหนึ่ง หากเราประกาศตัวแปรแต่ไม่ได้กำหนดค่าใดๆ ให้กับตัวแปร ตัวแปรนั้นจะถูกเริ่มต้นด้วยค่าเริ่มต้น:

• สตริงข้อความเริ่มต้นด้วยสตริงว่าง

• ตัวเลข — ค่า 0;

• พิมพ์ตัวแปร บูลีน - เท็จ;

• วันที่ – 30 ธันวาคม พ.ศ. 1899

ก่อนที่จะใช้ตัวแปรหรือค่าคงที่ จะต้องประกาศตัวแปรนั้นเสียก่อน ในการดำเนินการนี้ ให้เพิ่มบรรทัดโค้ดง่ายๆ ต่อไปนี้ลงในแมโคร:

Dim Имя_Переменной As Тип_Данных

ในบรรทัดข้างต้นของรหัส ตัวแปร_ชื่อ เป็นชื่อตัวแปรที่จะใช้ในโค้ด และ ประเภทข้อมูล เป็นหนึ่งในชนิดข้อมูลจากตารางที่ให้ไว้ก่อนหน้านี้เล็กน้อยในบทความนี้ ตัวอย่างเช่น:

Dim sVAT_Rate เป็น Dim เดียวฉันเป็นจำนวนเต็ม

ค่าคงที่ประกาศในทำนองเดียวกัน แต่เมื่อประกาศค่าคงที่ ต้องระบุค่าทันที ตัวอย่างเช่นเช่นนี้:

Const iMaxCount = 5000 Const iMaxScore = 100

ไม่จำเป็นต้องประกาศตัวแปรใน Excel โดยค่าเริ่มต้น ตัวแปรที่ป้อนทั้งหมดแต่ไม่ได้ประกาศใน Excel จะมีประเภท ตัวแปร และจะสามารถรับได้ทั้งค่าตัวเลขและค่าข้อความ

ดังนั้นโปรแกรมเมอร์จึงสามารถใช้ตัวแปรใหม่ได้ตลอดเวลา (แม้ว่าจะไม่ได้ประกาศไว้ก็ตาม) และ Excel จะถือว่าเป็นตัวแปรประเภท ตัวแปร. อย่างไรก็ตาม มีสาเหตุหลายประการที่ไม่ควรทำสิ่งนี้:

  1. การใช้หน่วยความจำและความเร็วในการคำนวณ หากคุณไม่ประกาศตัวแปรโดยระบุประเภทข้อมูล ตัวแปรนั้นจะถูกตั้งค่าเป็นประเภทโดยค่าเริ่มต้น ตัวแปร. ชนิดข้อมูลนี้ใช้หน่วยความจำมากกว่าชนิดข้อมูลอื่น ไบต์พิเศษสองสามไบต์ต่อตัวแปรอาจฟังดูไม่มากนัก แต่ในทางปฏิบัติ โปรแกรมสามารถมีตัวแปรได้หลายพันตัว (โดยเฉพาะเมื่อทำงานกับอาร์เรย์) ดังนั้นหน่วยความจำพิเศษที่ใช้โดยตัวแปรเช่น ตัวแปรเมื่อเทียบกับตัวแปรประเภท จำนวนเต็ม or เดียวสามารถเพิ่มได้เป็นจำนวนมาก นอกจากนี้การดำเนินการกับตัวแปรประเภท ตัวแปร ถูกดำเนินการช้ากว่าตัวแปรประเภทอื่นมาก ตามลำดับ ตัวแปรเพิ่มเติมพันตัวของประเภท ตัวแปร อาจทำให้การคำนวณช้าลงอย่างมาก
  2. ป้องกันการพิมพ์ผิดในชื่อตัวแปร หากมีการประกาศตัวแปรทั้งหมด คำสั่ง VBA ก็สามารถใช้ได้ − ตัวเลือกที่ชัดเจน (เราจะพูดถึงมันในภายหลัง) เพื่อระบุตัวแปรที่ไม่ได้ประกาศทั้งหมด ซึ่งจะช่วยขจัดข้อผิดพลาดในโปรแกรมอันเป็นผลมาจากชื่อตัวแปรที่เขียนไม่ถูกต้อง ตัวอย่างเช่น การใช้ตัวแปรชื่อ sVAT_อัตราคุณสามารถพิมพ์ผิดและเมื่อกำหนดค่าให้กับตัวแปรนี้ ให้เขียนว่า: “VATRate = 0,175” คาดว่าจากนี้ไปตัวแปร sVAT_อัตรา ควรมีค่าเท่ากับ 0,175 – แต่แน่นอนว่าไม่มี หากเปิดใช้งานโหมดการประกาศบังคับของตัวแปรที่ใช้ทั้งหมด คอมไพเลอร์ VBA จะระบุข้อผิดพลาดทันที เนื่องจากจะไม่พบตัวแปร อัตราภาษีมูลค่าเพิ่ม ในบรรดาผู้ที่ประกาศ
  3. เน้นค่าที่ไม่ตรงกับประเภทที่ประกาศของตัวแปร หากคุณประกาศตัวแปรบางประเภทและพยายามกำหนดข้อมูลประเภทอื่นให้ คุณจะได้รับข้อผิดพลาด ซึ่งหากไม่แก้ไข อาจทำให้โปรแกรมหยุดทำงาน เมื่อมองแวบแรก นี่อาจดูเหมือนเป็นเหตุผลที่ดีที่จะไม่ประกาศตัวแปร แต่ที่จริงแล้ว กลับกลายเป็นว่าตัวแปรตัวหนึ่งได้รับข้อมูลที่ไม่ถูกต้องซึ่งควรจะได้รับ ดีกว่ามาก! มิฉะนั้น หากโปรแกรมทำงานต่อไป ผลลัพธ์อาจไม่ถูกต้องและไม่คาดฝัน และจะค้นหาสาเหตุของข้อผิดพลาดได้ยากขึ้นมาก นอกจากนี้ยังเป็นไปได้ว่ามาโครจะดำเนินการ "สำเร็จ" เป็นผลให้ข้อผิดพลาดจะไม่มีใครสังเกตเห็นและการทำงานจะดำเนินการต่อไปด้วยข้อมูลที่ไม่ถูกต้อง!

ในแง่นี้ ขอแนะนำให้ตรวจหาประเภทข้อมูลที่ไม่ถูกต้องและแก้ไขข้อผิดพลาดดังกล่าวในโค้ดโดยเร็วที่สุด ด้วยเหตุผลเหล่านี้ ขอแนะนำให้คุณประกาศตัวแปรทั้งหมดเมื่อเขียนแมโคร VBA

ตัวเลือกที่ชัดเจน

ผู้ประกอบการ ตัวเลือกที่ชัดเจน ทำให้ตัวแปรทั้งหมดที่จะใช้ในโค้ด VBA ถูกประกาศ และตั้งค่าสถานะตัวแปรที่ไม่ได้ประกาศทั้งหมดเป็นข้อผิดพลาดในระหว่างการคอมไพล์ (ก่อนเริ่มการรันโค้ด) การใช้ตัวดำเนินการนี้ไม่ใช่เรื่องยาก – เพียงแค่เขียนบรรทัดนี้ที่ด้านบนสุดของไฟล์ VBA:

Option Explicit

หากคุณต้องการแทรกเสมอ ตัวเลือกที่ชัดเจน ที่ด้านบนของแต่ละโมดูล VBA ใหม่ที่สร้างขึ้น ซึ่งสามารถทำได้โดยอัตโนมัติ ในการดำเนินการนี้ คุณต้องเปิดใช้งานตัวเลือก ต้องการการประกาศตัวแปร ในการตั้งค่าตัวแก้ไข VBA

สิ่งนี้ทำได้ดังนี้:

  • จากเมนู Visual Basic Editor คลิก เครื่องมือ > Options
  • ในกล่องโต้ตอบที่ปรากฏขึ้น ให้เปิดแท็บ บรรณาธิการ
  • ทำเครื่องหมายในช่อง ต้องการการประกาศตัวแปร และกด OK

เมื่อเปิดใช้งาน string ตัวเลือกที่ชัดเจน จะถูกแทรกโดยอัตโนมัติที่จุดเริ่มต้นของแต่ละโมดูลใหม่ที่สร้างขึ้น

ขอบเขตของตัวแปรและค่าคงที่

ตัวแปรหรือค่าคงที่ที่ประกาศแต่ละตัวมีขอบเขตจำกัดของตัวเอง กล่าวคือ ส่วนที่จำกัดของโปรแกรมซึ่งมีตัวแปรนี้อยู่ ขอบเขตขึ้นอยู่กับตำแหน่งที่มีการประกาศตัวแปรหรือค่าคงที่ ยกตัวอย่างตัวแปร sVAT_อัตราซึ่งใช้ในฟังก์ชัน ค่าใช้จ่ายทั้งหมด. ตารางต่อไปนี้กล่าวถึงสองตัวเลือกสำหรับการกำหนดขอบเขตตัวแปร sVAT_อัตราประกาศในสองตำแหน่งที่แตกต่างกันในโมดูล:

ตัวเลือก Explicit Dim sVAT_Rate เป็นฟังก์ชันเดี่ยว Total_Cost() เป็นสองเท่า ... สิ้นสุดฟังก์ชัน
ถ้าตัวแปร sVAT_อัตรา ประกาศที่จุดเริ่มต้นของโมดูล จากนั้นขอบเขตของตัวแปรนี้จะเป็นทั้งโมดูล (เช่น ตัวแปร sVAT_อัตรา จะได้รับการยอมรับโดยขั้นตอนทั้งหมดในโมดูลนี้)

ดังนั้นหากอยู่ในฟังก์ชัน ค่าใช้จ่ายทั้งหมด ตัวแปร sVAT_อัตรา จะได้รับการกำหนดค่าบางอย่าง จากนั้นฟังก์ชันถัดไปที่ดำเนินการภายในโมดูลเดียวกันจะใช้ตัวแปร sVAT_อัตรา ที่มีความหมายเดียวกัน

อย่างไรก็ตาม หากมีการเรียกใช้ฟังก์ชันบางฟังก์ชันที่อยู่ในโมดูลอื่น ตัวแปรนั้นสำหรับฟังก์ชันนั้น sVAT_อัตรา จะไม่เป็นที่รู้จัก

ตัวเลือก Explicit Function Total_Cost() เป็น Double Dim sVAT_Rate เป็น Single ... End Function
ถ้าตัวแปร sVAT_อัตรา ประกาศที่จุดเริ่มต้นของฟังก์ชัน ค่าใช้จ่ายทั้งหมดจากนั้นขอบเขตจะถูกจำกัดเฉพาะฟังก์ชันนี้ (เช่น ภายในฟังก์ชัน ค่าใช้จ่ายทั้งหมดคุณสามารถใช้ตัวแปร sVAT_อัตราแต่ไม่นอก)

เมื่อลองใช้ sVAT_อัตรา ในขั้นตอนอื่น คอมไพเลอร์ VBA จะรายงานข้อผิดพลาดเนื่องจากไม่ได้ประกาศตัวแปรนี้นอกฟังก์ชัน ค่าใช้จ่ายทั้งหมด (โดยมีเงื่อนไขว่ามีการใช้โอเปอเรเตอร์ ตัวเลือกที่ชัดเจน).

ในตัวอย่างที่แสดงด้านบน ตัวแปรถูกประกาศที่ระดับโมดูลด้วยคีย์เวิร์ด สลัว. อย่างไรก็ตาม อาจจำเป็นต้องใช้ตัวแปรที่ประกาศไว้ในโมดูลอื่น ในกรณีเช่นนี้ การประกาศตัวแปรแทนคีย์เวิร์ด สลัว ต้องใช้คีย์เวิร์ด สาธารณะ.

อนึ่ง เพื่อประกาศตัวแปรในระดับโมดูล แทนคีย์เวิร์ด สลัว สามารถใช้คีย์เวิร์ดได้ ส่วนตัวซึ่งระบุว่าตัวแปรนี้มีไว้สำหรับใช้ในโมดูลปัจจุบันเท่านั้น

คุณยังสามารถใช้คีย์เวิร์ดเพื่อประกาศค่าคงที่ได้อีกด้วย สาธารณะ и ส่วนตัวแต่ไม่ใช่แทนคีย์เวิร์ด constพร้อมกับมัน

ตัวอย่างต่อไปนี้แสดงการใช้คีย์เวิร์ด สาธารณะ и ส่วนตัว นำไปใช้กับตัวแปรและค่าคงที่

ตัวเลือก Explicit Public sVAT_Rate เป็น Single Public Const iMax_Count = 5000 ...    
ในตัวอย่างนี้ คีย์เวิร์ด สาธารณะ ใช้ในการประกาศตัวแปร sVAT_อัตรา และค่าคงที่ iMax_Count. ขอบเขตขององค์ประกอบที่ประกาศในลักษณะนี้จะเป็นโครงการปัจจุบันทั้งหมด

ซึ่งหมายความว่า sVAT_อัตรา и iMax_Count จะมีอยู่ในโมดูลโครงการใด ๆ

ตัวเลือก Explicit Private sVAT_Rate เป็น Single Private Const iMax_Count = 5000 ...    
ในตัวอย่างนี้ การประกาศตัวแปร sVAT_อัตรา และค่าคงที่ iMax_Count คีย์เวิร์ดที่ใช้ ส่วนตัว. ขอบเขตขององค์ประกอบเหล่านี้เป็นโมดูลปัจจุบัน

ซึ่งหมายความว่า sVAT_อัตรา и iMax_Count จะสามารถใช้ได้ในทุกโพรซีเดอร์ของโมดูลปัจจุบัน แต่จะไม่สามารถใช้กับโพรซีเดอร์ในโมดูลอื่นได้

เขียนความเห็น