משתנים וקבועים ב-VBA

ב-VBA, כמו בכל שפת תכנות אחרת, משתמשים במשתנים וקבועים לאחסון כל ערכים. כפי שהשם מרמז, משתנים יכולים להשתנות, בעוד שקבועים מאחסנים ערכים קבועים.

למשל, קבוע Pi מאחסן את הערך 3,14159265... המספר "Pi" לא ישתנה במהלך ביצוע התוכנית, אבל עדיין נוח יותר לאחסן ערך כזה כקבוע.

במקביל, נוכל להשתמש במשתנה sVAT_Rate לאחסן את שיעור המע"מ על סחורה שנרכשה. ערך משתנה sVAT_Rate עשוי להשתנות בהתאם למוצר הנרכש.

סוגי מידע

כל המשתנים והקבועים הם מסוג נתונים מסוים. הטבלה שלהלן מפרטת את סוגי הנתונים המשמשים ב-VBA עם תיאור וטווח של ערכים אפשריים:

סוג מידע מידהתיאורטווח ערכים
בתיםהבתים 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 As Single Dim i As Integer

קבועים מוכרזים באופן דומה, אך כאשר מכריזים על קבועים, יש לציין מיד את ערכם. לדוגמה, כך:

Const iMaxCount = 5000 Const iMaxScore = 100

אין צורך להצהיר על משתנים באקסל. כברירת מחדל, כל המשתנים שהוזנו אך לא הוצהרו ב- Excel יהיו בעלי הסוג גִרְסָה אַחֶרֶת ויוכל לקבל ערך מספרי וטקסט כאחד.

כך, המתכנת יכול להשתמש במשתנה החדש בכל עת (גם אם לא הוכרז), ואקסל יתייחס אליו כמשתנה מסוג גִרְסָה אַחֶרֶת. עם זאת, ישנן מספר סיבות מדוע אסור לעשות זאת:

  1. שימוש בזיכרון ומהירות חישוב. אם לא תכריז על משתנה עם ציון של סוג הנתונים, אז כברירת מחדל הוא יוגדר לסוג גִרְסָה אַחֶרֶת. סוג נתונים זה משתמש יותר בזיכרון מאשר סוגי נתונים אחרים. כמה בתים נוספים לכל משתנה אולי לא נשמעים כמו הרבה, אבל בפועל, לתוכניות יכולות להיות אלפי משתנים (במיוחד כשעובדים עם מערכים). לכן, הזיכרון הנוסף המשמש משתנים כמו גִרְסָה אַחֶרֶת, בהשוואה למשתנים מסוג מספר שלם or יחיד, יכול להסתכם בסכום משמעותי. בנוסף, פעולות עם משתנים מסוג גִרְסָה אַחֶרֶת מבוצעים הרבה יותר לאט מאשר עם משתנים מסוגים אחרים, בהתאמה, עוד אלף משתנים מסוג גִרְסָה אַחֶרֶת יכול להאט משמעותית את החישובים.
  2. מניעת שגיאות הקלדה בשמות משתנים. אם כל המשתנים מוצהרים, אז ניתן להשתמש במשפט VBA − אפשרות מפורשת (נדבר על זה בהמשך) על מנת לזהות את כל המשתנים הלא מוכרזים. זה מבטל את הופעתה של שגיאה בתוכנית כתוצאה של שם משתנה שנכתב בצורה שגויה. לדוגמה, שימוש במשתנה בשם sVAT_Rate, אתה יכול לעשות שגיאת הקלדה, ולהקצות ערך למשתנה זה, לכתוב: "VATRate = 0,175". צפוי כי מעתה ואילך, המשתנה sVAT_Rate צריך להכיל את הערך 0,175 - אבל כמובן שלא. אם מצב ההכרזה החובה של כל המשתנים בשימוש מופעל, מהדר VBA יציין מיד שגיאה, מכיוון שהוא לא ימצא את המשתנה שיעור VATR בין אלה שהוכרזו.
  3. הדגשת ערכים שאינם תואמים לסוג המוצהר של משתנה. אם תצהירו על משתנה מסוג מסוים ותנסו להקצות לו נתונים מסוג אחר, תקבלו שגיאה, שאם לא תתוקן עלולה לגרום לתוכנית לקרוס. במבט ראשון, זו אולי נראית סיבה טובה לא להצהיר על משתנים, אבל למעשה, מבעבר מתברר שאחד המשתנים קיבל את הנתונים הלא נכונים שהוא היה אמור לקבל – על אחת כמה וכמה! אחרת, אם התוכנית תמשיך לפעול, התוצאות עלולות להיות שגויות ובלתי צפויות, ויהיה קשה הרבה יותר למצוא את הסיבה לשגיאות. ייתכן גם שהמאקרו יבוצע "בהצלחה". כתוצאה מכך, השגיאה תיעלם מעיניה והעבודה תמשיך עם נתונים שגויים!

בהקשר זה, רצוי לזהות סוג נתונים שגוי ולתקן שגיאות כאלה בקוד מוקדם ככל האפשר. מסיבות אלו, מומלץ להצהיר על כל המשתנים בעת כתיבת מאקרו VBA.

אפשרות מפורשת

מַפעִיל אפשרות מפורשת גורם להכרזה על כל המשתנים שישמשו בקוד VBA, ומסמן את כל המשתנים הלא מוכרזים כשגיאות במהלך ההידור (לפני תחילת ביצוע הקוד). יישום האופרטור הזה אינו קשה - פשוט כתוב את השורה הזו בחלק העליון של קובץ ה-VBA:

Option Explicit

אם אתה רוצה להכניס תמיד אפשרות מפורשת לראש כל מודול VBA חדש שנוצר, ניתן לעשות זאת באופן אוטומטי. כדי לעשות זאת, עליך להפעיל את האפשרות דרוש הצהרת משתנה בהגדרות עורך VBA.

הדבר מתבצע כך:

  • מתפריט Visual Basic Editor, לחץ על כלים > אפשרויות
  • בתיבת הדו-שיח שמופיעה, פתח את הכרטיסייה עורך
  • בדוק את הקופסא דרוש הצהרת משתנה ולחץ OK

כאשר מופעלת, המחרוזת אפשרות מפורשת יוכנס אוטומטית בתחילת כל מודול חדש שנוצר.

היקף משתנים וקבועים

לכל משתנה או קבוע מוצהר יש היקף מצומצם משלו, כלומר, חלק מוגבל מהתוכנית שבה קיים משתנה זה. ההיקף תלוי במקום בו נעשתה ההכרזה על המשתנה או הקבוע. קח, למשל, את המשתנה sVAT_Rate, המשמש בפונקציה עלות כוללת. הטבלה הבאה דנה בשתי אפשרויות לטווח משתנה sVAT_Rateמוצהר בשתי עמדות שונות במודול:

אפשרות עמום מפורש sVAT_Rate כפונקציה בודדת Total_Cost() כפול ... פונקציית סוף
אם המשתנה sVAT_Rate שהוכרז ממש בתחילת המודול, אז ההיקף של משתנה זה יהיה המודול כולו (כלומר המשתנה sVAT_Rate יוכר על ידי כל הנהלים במודול זה).

לכן, אם בפונקציה עלות כוללת משתנה sVAT_Rate יוקצה ערך כלשהו, ​​ואז הפונקציה הבאה שתבוצע באותו מודול תשתמש במשתנה sVAT_Rate עם אותה משמעות.

עם זאת, אם פונקציה כלשהי שנמצאת במודול אחר נקראת, אז עבורה המשתנה sVAT_Rate לא יהיה ידוע.

אפשרות פונקציה מפורשת Total_Cost() As Double Dim sVAT_Rate As Single ... End Function
אם המשתנה sVAT_Rate הוצהר בתחילת הפונקציה עלות כוללת, אז ההיקף שלה יהיה מוגבל רק לפונקציה זו (כלומר בתוך הפונקציה עלות כוללת, אתה יכול להשתמש במשתנה sVAT_Rate, אבל לא בחוץ).

כאשר מנסים להשתמש sVAT_Rate בהליך אחר, מהדר VBA ידווח על שגיאה מכיוון שמשתנה זה לא הוכרז מחוץ לפונקציה עלות כוללת (בתנאי שנעשה שימוש במפעיל אפשרות מפורשת).

בדוגמה המוצגת למעלה, המשתנה מוצהר ברמת המודול עם מילת המפתח עמום. עם זאת, ייתכן שיהיה צורך להשתמש במשתנים מוצהרים במודולים אחרים. במקרים כאלה, להכריז על משתנה במקום מילת מפתח עמום יש להשתמש במילת מפתח הציבור.

אגב, על מנת להכריז על משתנה ברמת המודול, במקום מילת המפתח עמום ניתן להשתמש במילת מפתח פְּרָטִי, מה שמציין שהמשתנה הזה מיועד לשימוש רק במודול הנוכחי.

אתה יכול גם להשתמש במילות מפתח כדי להכריז על קבועים. הציבור и פְּרָטִי, אך לא במקום מילת המפתח קונסט, יחד עם זה.

הדוגמאות הבאות מציגות את השימוש במילות מפתח הציבור и פְּרָטִי מיושם על משתנים וקבועים.

אפשרות ציבורית מפורשת sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
בדוגמה זו, מילת המפתח הציבור משמש להכרזה על משתנה sVAT_Rate וקבועים iMax_Count. היקף האלמנטים שהוכרזו בדרך זו יהיה כל הפרויקט הנוכחי.

משמעות הדבר היא sVAT_Rate и iMax_Count יהיה זמין בכל מודול פרויקט.

אפשרות פרטי מפורש sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
בדוגמה זו, להכריז על משתנה sVAT_Rate וקבועים iMax_Count מילת מפתח בשימוש פְּרָטִי. היקף האלמנטים הללו הוא המודול הנוכחי.

משמעות הדבר היא sVAT_Rate и iMax_Count יהיה זמין בכל ההליכים של המודול הנוכחי, אך לא יהיה זמין להליכים במודולים אחרים.

השאירו תגובה