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

מבוא

מאמר זה מתאר כיצד להשתמש במשתנים בהליכים Microsoft Excel ב- Microsoft Visual Basic for Applications.

מידע נוסף

משתנים בהליך משנה

תכונה רבת עוצמה של שפות תיכנות היא היכולת לאחסן משהו במשתנה כדי שתוכל להשתמש בתוכן המשתנה או לשנות אותו מאוחר יותר בהליך. מסמך זה דן בשימוש הבא במשתנים ב- Visual Basic:

  • אופן ההכרזה על משתנים.

  • ההליכים והפרוייקטים ה יכולים להשתמש במשתנה.

  • משך החיים של משתנה.

הצהרה על משתנה במאקרו

הדרך הפשוטה ביותר להצהיר על משתנה במאקרו היא להשתמש במשפט Dim. השורה הבאה מצהירה על שני משתנים, כ מספר שלם:

    Dim x As Integer, y As Integer

כאשר x ו- y מוגדרים כמספרים שלמים, אתה אומר ל- Visual Basic לציין מספיק זיכרון עבור משתנה מספר שלם (2 בתים כל אחד עבור x ו- y) והמידע המאוחסן ב- x או ב- y הוא מספר שלם בין -32768 ל- 32767.

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

אם לא תציין את סוג הנתונים עבור כל משתנה, כמו בקוד Visual Basic הבא, רק המשתנה y מוגדר כמשתנה מספר שלם. המשתנה x יהיה סוג משתנה:

    Dim x, y As Integer

לקבלת מידע נוסף, ראה סוג הנתונים Variant להלן.
 

כדי לבצע משתנה מחשב, בצע את הפעולות הבאות:

  1. שמור וסגור חוברות עבודה פתוחות ולאחר מכן פתח חוברת עבודה חדשה.

  2. הפעל את Visual Basic עורך (הקש ALT+F11).

  3. בתפריט הוספה, לחץ על מודול.

  4. הקלד את הקוד הבא:

    Sub Variable_Test()
        Dim x כ מספר שלם, y בתור מספר שלם
        x = 10
        y = 100
        MsgBox "value of x is " & x & _
        Chr(13) & "value of y is " & y
    End Sub

  5. הפעל את Variable_Test המאקרו. אתה מקבל את ההודעה הבאה:

    the value of x is 10
    the value of y is 100

  6. לחץ על אישור.

  7. במאקרו Variable_Test לשנות את השורה הבאה:

    x = 10

  8. אל:

    x = "error"

  9. הפעל את Variable_Test המאקרו.

תקבל שגיאת זמן ריצה מאחר ש- "error" אינו מספר שלם, ואתה מנסה להקצות ערך מחרוזת זה למשתנה x של מספר שלם.
 

סיכום סוג נתונים

אלה הם סוגי הנתונים הנפוצים של משתנים:

סוגי נתונים משתנים נפוצים

סוג נתונים משתנה

אם לא תציין סוג נתונים בעת הצהרה על משתנה, או אם לא תכריז על משתנה בכלל, Visual Basic מציין באופן אוטומטי את סוג הנתונים משתנה עבור משתנה זה. להלן היתרונות של משתנים המוצהרת כסוג נתונים זה:

  • המשתנים יכולים להכיל ערכים מחרוזת, תאריך, שעה, בוליאני או מספרי.

  • המשתנים יכולים להמיר את הערכים שהם מכילים באופן אוטומטי.

החסרונות הם שמשתנים שונים דורשים לפחות 16 בתים של זיכרון. 16 בתים של זיכרון יכולים להיות משמעותיים בהליכים גדולים או במודולים מורכבים.

כדי לראות כיצד פעולה זו פועלת במאקרו Variable_Test, בצע את הפעולות הבאות:

שנה את הקוד במאקרו Variable_Test ל:

Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

הפעל את Variable_Test המאקרו.

לא תקבל שגיאה מכיוון שתוכל להקצות כל דבר למשתנים השונים x ו- y.

הערה: באפשרותך גם להשאיר את השורה הבאה, המאקרו עדיין יפעל כאשר המשתנים x ו- y מטופלים כ סוגי נתונים של Variant:

    Dim x, y

טווח של משתנה

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

טווח ברמת פרוצדורה

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

כדי לוודא כי משתנה עם טווח ברמת הפרוצדורה אינו נראה מחוץ להליך שבו הוא מוצהר, בצע את הפעולות הבאות:

  1. הוסף מודול חדש לפרוייקט שלך.

  2. הקלד את שתי פקודות המאקרו הבאות במודול זה:
      Sub Macro1() Dim x בתור מספר שלם x = 10 MsgBox "x, כפי שנרמע על-ידי Macro1 הוא " & x 'השורה הבאה מפעילה את Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, כפי שצוין על-ידי Macro2 הוא " & x End Sub

  3. הפעל את Macro1, ותתן לך את ההודעה

    הבאה:x, as seen by Macro1 is 10

  4. לחץ עלאישור, ותתן לך את ההודעה

    הבאה:x, as seen by Macro2 is

  5. לחץ על אישור.

Macro2 אינו מציג ערך עבור המשתנה x מכיוון שהמשתנה x מקומי ל- Macro1.

טווח ברמת המודול הפרטי והציבור

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

כדי לראות את ההבדל בין המשפט הציבורי לבין המשפט Dim, בצע את הפעולות הבאות:

  1. שמור וסגור חוברות עבודה פתוחות ולאחר מכן פתח חוברת עבודה חדשה.

  2. הפעל את Visual Basic עורך.

  3. הוסף מודול לפרוייקט שלך.

  4. Type the following code into this module:
    
    Public x As Integer
    Sub Macro_1a()
        x = 10
        MsgBox x
        Macro_1b
    End Sub
    Sub Macro_1b()
        x = x * 2
        MsgBox x
        Macro2
    End Sub
  5. הוסף מודול אחר לפרוייקט שלך.

  6. הקלד את הקוד הבא במודול זה:


    Sub Macro2()     x = x * 3
        MsgBox x
    End Sub

  7. הפעל Macro_1a מאקרו במודול הראשון.

  8. כאשר המשתנה x מוצהר כ"Public x As Integer", לכל שלוש פקודות המאקרו בפרוייקט יש גישה לערך של x. תיבת ההודעה הראשונה מציגה ערך של 10. תיבת ההודעה השניה מציגה ערך של 20 (מכיוון ש- x מוכפל ב- 2 ב- Macro_1b). תיבת ההודעה השלישית מציגה ערך של 60 (מכיוון שהערך של x השתנה ל- 20 ב- Macro_1b ולאחר מכן הוכפל ב- 3 ב- Macro2).

  9. שנה את שורת ההצהרה במודול הראשון מתוך:

       Public x As Integer

    to:

       Dim x As Integer

  10. הפעל את Macro_1a המאקרו.

  11. כאשר המשתנה x מוצהר כ" Dim x As Integer", רק לפקודות המאקרו במודול הראשון יש גישה לערך של x. לכן, תיבת ההודעה הראשונה מציגה ערך של 10, תיבת ההודעה השניה מציגה ערך של 20 (מכיוון ש- x מוכפל ב- 2 ב- Macro_1b) ותיבת ההודעה השלישית מציגה ערך של 0 (מכיוון ש- Macro2 אינו רואה את הערך x והערך הלא מאותחל של אפס נמצא בשימוש על-ידי מאקרו 2).

  12. שנה את שורת ההצהרה במודול הראשון מתוך:

      Dim x As Integer

    אל:

        Private x As Integer

  13. הפעל את Macro_1a המאקרו.

  14. אותן תיבות הודעה מוצגות באמצעות טווח המשפט הפרטי כפי שהיו בשימוש במשפט Dim. למשתנה x יש טווח זהה, פרטי למודול שבו הוא מוצהר.


הערה: אם ברצונך שהטווח של המשתנה שלך יהיה מוגבל למודול שבו הוא מוצהר, השתמש במשפט Privatestatement במקום במשפט Dim. שניהם משיגים את אותו האפקט, אך הטווח ברור יותר כאשר אתה קורא את הקוד אם אתה משתמש במשפט Private.
 

אורך חיים של משתנה

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

אתחול הערך של משתנה

בעת הפעלת מאקרו, כל המשתנים מאותחלים לערך. משתנה מספרי מאותחל לאפס, מחרוזת אורך משתנה מאותחלת למחרוזת באורך אפס ("") ומחרוזת באורך קבוע מתמלאת בקוד ASCII 0. משתני משתנה מאותחלים לריק. משתנה ריק מיוצג על-ידי אפס בהקשר מספרי ומחרוזת באורך אפס ("") בהקשר מחרוזת.

משתנים ברמת פרוצדורה

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

כדי להדגים כיצד משתנים ברמת הפרוצדורה פועלים, בצע את הפעולות הבאות:

  1. הוסף מודול חדש לפרוייקט שלך.

  2. הקלד את שתי פקודות המאקרו הבאות במודול זה:

    Sub Macro1()
        'set x כמשתנה רמת פרוצדורה
       Dim x בתור מספר שלם
       MsgBox "הערך המ מאותחל של x הוא " & x
       x = 10
        MsgBox "x is " & x
        השורה הבאה מפעילה את Macro2
        Macro2
        MsgBox "x עדיין " & x
    End Sub
    Sub Macro2()
        MsgBox "x, כפי שהוא נראה על-ידי Macro2 הוא " & x
    End Sub

  3. הפעל את Macro1.

  4. אתה מקבל את ההודעה הבאה:

        the initialized value of x is 0

  5. לחץ עלאישור, ואתה מקבל את ההודעה:

     x is 10

  6. לחץ עלאישור, ותתן לך את ההודעה

    הבאה:x, as seen by Macro2 is

  7. לחץ על אישור.

  8. Macro2 אינו מציג ערך עבור המשתנה x מכיוון שהמשתנה x מקומי ל- Macro1. אתה מקבל את ההודעה הבאה:

    x is still 10

  9. לחץ על אישור.

  10. הפעל את Macro1.

אתה מקבל את אותן הודעות המתוארות בשלבים 3 עד 6 מכיוון ברגע ש- Macro1 הפסיק לפעול בשלב 6, הערך של המשתנה x אבד. לכן, כאשר אתה מפעיל מחדש את Macro1 בשלב 7, ההודעה הראשונה מציגה את הערך של x כאפס (הערך מאותחל).

מילת מפתח סטטית

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

כדי לראות כיצד פועלת מילת המפתח סטטית, בצע את הפעולות הבאות:

  1. Change the code in Macro1 to:
    
    Sub Macro1()
        'set x as a procedure level variable
        Static x As Integer
           MsgBox "the initialized value of x is " & x
        x = x + 10
        MsgBox "x is " & x
    End Sub
  2. הפעל את Macro1.

  3. אתה מקבל את ההודעה:

    the initialized value of x is 0

  4. לחץ עלאישור, ואתה מקבל את ההודעה:

    x is 10

  5. לחץ על אישור.

  6. הפעל את Macro1, ואתה מקבל את ההודעה

    הבאה:the initialized value of x is 10

  7. לחץ עלאישור, ותתן לך את ההודעה

    הבאה:x is 20

  8. לחץ על אישור.

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

הערה:  אם יש לך משתנה ברמת המודול, משך החיים שלו זהה למשתנה ברמת ההליך הסטטי.

כדי לאמת את משך החיים של משתנה ברמת מודול, בצע את הפעולות הבאות:

  1. Change the code in the module that contains Macro1 to the following:
    
    Dim x As Integer  'create a module-level variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
       x = x + 10
       MsgBox "x is " & x
    End Sub
  2. הפעל את Macro1, ותתן לך את ההודעה

    הבאה:the initialized value of x is 0

  3. לחץ על אישור, ותת מקבל את ההודעה

    הבאה:x is 10

  4. לחץ על אישור,

  5. הפעל את Macro1, ותתן לך הודעה זו:

    the initialized value of x is 10

  6. לחץ על אישור.

  7. אתה מקבל את ההודעה הבאה:

    x is 20

  8. לחץ על אישור.

הערכים המופיעים בהודעות שונים בפעם השניה מאחר שהמשתנה x מוצהרת כמשתנה סטטי והיא שומרת על הערך שלה לאחר הפעלת Macro1 בפעם הראשונה.
 

איפוס פרוייקט לאיפוס משתנים

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

אם תעשה זאת עבור הפרוייקט Macro1 ולאחר מכן ת מפעיל מחדש את Macro1, הערך של המשתנה x מאותחל בחזרה לאפס ואתה מקבל את ההודעה הראשונה:

    the initialized value of x is 0

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

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

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

האם מידע זה היה שימושי?

עד כמה אתם מרוצים מאיכות השפה?
מה השפיע על החוויה שלך?
בלחיצה על 'שלח', אתה מאפשר למשוב שלך לשפר מוצרים ושירותים של Microsoft. מנהל ה-IT שלך יוכל לאסוף נתונים אלה. הצהרת הפרטיות.

תודה על המשוב!

×