משתנים סטטים ב- VBA ( מקרו של אקסל )
שלום וברכה,
הצגתי בעבר איך משתמשים במשתנים בכל מיני מאקרויים שאנחנו כותבים. הפעם אני רוצה להציג סוג שונה של משתנים.
משתנים שהערך שלהם לא מתאפס ברגע שהפעלת המאקרו הסתיימה.
מה השימוש של משתנים סטטים במאקרו vba ?
נניח ויש לנו סיטואציה שבה אנחנו רוצים לשמור על הערך של המשתנה כל עוד האקסל עובד.
לדוגמה, יש לנו מאקרו שמחובר למערכת של בנק, וכל לחיצה עליו, מבצעת פעולה שעליה משלמים עמלה.
המנהל רוצה להתריע בכל פעם שלחצו יותר מחמש פעמים, כיוון שהוא לא רוצה לשלם עמלות
אז נדרשת התראה במקרה ולוחצים על הכפתור יותר מדי פעמים.
איך נעשה זאת ?
ללא משתנים סטטים (שמייד אדגים) הקוד היה נראה כך :
Sub SendToBank()
Dim counter as Integer
Counter = counter + 1
If (counter>5) then msgbox("more than 5 times… be careful")
End sub
אבל, הבעיה בקוד הזה , היא שהמשתנה counter נוצר כל פעם מחדש, ובכל פעם הערך שלו בהתחלה הוא אפס .
איך נגרום למשתנה לשמור על ערכו ולא להתאפס ?
לצורך כך, אחד הפתרונות הוא משתנה סטטי – משתנה סטטי שומר על ערכו, ולא מתאפס.
נתקן את הקוד שיראה כך :
Sub SendToBank()
Static counter as Integer
Counter = counter + 1
If (counter>5) then msgbox("more than 5 times… be careful")
End sub
ועכשיו, כל לחיצה תעלה את ערך המשתנה באחד. והמשתנה לא יתאפס.
זהו…
סיכום - משתנים סטטים ב-VBA
ראינו שיטה פשוטה בה אפשר להשתמש במשתנה, שערכו לא מתאפס כאשר המאקרו מסיים לרוץ.
בהצלחה!
הערות להרחבה :
ראשית – יש שיטות נוספות להשיג את המטרה הזו, אפשר להשתמש במשתנים ציבוריים Public או לאחסן את הערך בתא ועוד. המטרה שלי הייתה להציג את הפשטות של שימוש במשתנה סטטי, שלא מצריכה הבנה מעמיקה של כל נושא ה scope של משתנים.
שנית, בתיכנות, הבעיה שהתעסקנו איתה נקראת state ומי שמעוניין להעמיק בנושא, מוזמן לגגל על זה.
קרדיט לתמונת הפתיח : Image by Lee Travathan from Pixabay