נהלי "פונקציה" ו"תת" ב-VBA

פונקציות VBA מובנות

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

ניתן לראות רשימה של פונקציות אלה בעורך VBA:

  • פתח חוברת עבודה של Excel והפעל את עורך VBA (לחץ כדי לעשות זאת Alt + F11ואז לחץ F2.
  • בחר ספרייה מהרשימה הנפתחת בפינה השמאלית העליונה של המסך VBA.
  • תופיע רשימה של מחלקות ופונקציות VBA מובנות. לחץ על שם הפונקציה כדי להציג את התיאור הקצר שלה בתחתית החלון. לחיצה F1 יפתח את דף העזרה המקוון עבור תכונה זו.

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

נהלים מותאמים אישית "פונקציה" ו"תת" ב-VBA

ב-Excel Visual Basic, קבוצה של פקודות המבצעות משימה מסוימת ממוקמת בהליך. פונקציה (פונקציה) או תַת (תת שגרה). ההבדל העיקרי בין ההליכים פונקציה и תַת זה הנוהל פונקציה מחזיר תוצאה, נוהל תַת – לא.

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

טיעונים

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

Sub AddToCells(i As Integer) ... End Sub

זכור שיש טיעונים לנהלים פונקציה и תַת ב-VBA הוא אופציונלי. חלק מהנהלים אינם דורשים טיעונים.

טיעונים אופציונליים

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

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

Sub AddToCells (אופציונלי i As Integer = 0)

במקרה זה, הטיעון של מספר שלם i ברירת המחדל תהיה 0.

יכולים להיות מספר ארגומנטים אופציונליים בהליך, שכולם רשומים בסוף רשימת הארגומנטים.

העברת ארגומנטים לפי ערך ולפי הפניה

ניתן להעביר טיעונים ב-VBA להליך בשתי דרכים:

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

שימוש במילות מפתח ByVal or Byref בהצהרת ההליך, אתה יכול לציין כיצד הטיעון מועבר להליך. זה מוצג בדוגמאות שלהלן:

Sub AddToCells(ByVal i As Integer) ... End Sub
במקרה זה, הטיעון של מספר שלם i עבר לפי ערך. לאחר עזיבת ההליך תַת הכל עשוי עם i שינויים יאבדו.
Sub AddToCells(ByRef i As Integer) ... End Sub
במקרה זה, הטיעון של מספר שלם i עבר בהפניה. לאחר עזיבת ההליך תַת הכל עשוי עם i השינויים יישמרו במשתנה שהועבר לנוהל תַת.

זכור כי ארגומנטים ב-VBA מועברים על ידי הפניה כברירת מחדל. במילים אחרות, אם לא נעשה שימוש במילות מפתח ByVal or Byref, אז הטיעון יועבר בהפניה.

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

נוהל VBA «פונקציה»

עורך VBA מזהה את ההליך פונקציהכאשר הוא נתקל בקבוצת פקודות המוקפת בין הצהרות הפתיחה והסיום הבאות:

פונקציה ... פונקציה סיום

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

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

זה מומחש היטב בדוגמה הבאה.

דוגמה לפונקציית VBA: ביצוע פעולה מתמטית על 3 מספרים

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

פונקציה SumMinus(dNum1 ככפול, dNum2 ככפול, dNum3 כפול) כפול SumMinus = dNum1 + dNum2 - dNum3 פונקציית סוף

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

קורא לנוהל VBA "פונקציה"

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

קרא לנוהל VBA "פונקציה" מהליך אחר

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

Sub main() עמום סך כפול סך = SumMinus(5, 4, 3) End Sub

קרא לנוהל VBA "פונקציה" מגיליון עבודה

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

=SumMinus(10, 5, 2)

נוהל VBA «Sub»

עורך VBA מבין שיש פרוצדורה מולו תַתכאשר הוא נתקל בקבוצת פקודות המוקפת בין הצהרות הפתיחה והסיום הבאות:

תת ... סוף משנה

הליך VBA "Sub": דוגמה 1. יישור מרכז וגודל גופן שינוי בטווח נבחר של תאים

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

Sub Format_Centered_And_Sized(אופציונלי iFontSize כמספר שלם = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

התהליך הזה תַת מבצע פעולות אך אינו מחזיר תוצאה.

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

נוהל משנה VBA: דוגמה 2: יישור מרכז וגופן מודגש בטווח נבחר של תאים

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

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

הליך קריאת "משנה" ב- Excel VBA

קרא לנוהל VBA "Sub" מהליך אחר

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

Sub main() Call Format_Centered_And_Sized(20) End Sub

אם ההליך Format_Centered_And_Sized יש יותר מארגומנט אחד, יש להפריד ביניהם בפסיקים. ככה:

Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub

קרא לנוהל VBA "Sub" מגיליון העבודה

נוהל תַת לא ניתן להזין ישירות לתוך תא גיליון אקסל, כפי שניתן לעשות עם פרוצדורה פונקציהבגלל ההליך תַת לא מחזיר ערך. עם זאת, נהלים תַת, שאין להם טיעונים ומוכרזים כ הציבור (כפי שמוצג להלן) יהיה זמין למשתמשי גליון העבודה. לפיכך, אם ההליכים הפשוטים שנדונו לעיל תַת מוכנס למודול בעורך Visual Basic, ההליך Format_Centered_And_Bold יהיה זמין לשימוש בגיליון עבודה של Excel, וההליך Format_Centered_And_Sized - לא יהיה זמין כי יש לו טיעונים.

הנה דרך קלה להפעיל (או לבצע) הליך תַת, נגיש מגליון העבודה:

  • חדשות ועדכונים Alt + F8 (לחץ על הכפתור אחר ותוך כדי החזקתו, הקש על המקש F8).
  • ברשימת פקודות המאקרו שמופיעה, בחר את זו שברצונך להפעיל.
  • חדשות ועדכונים הפעלה (לָרוּץ)

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

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

תשומת הלב: בעת הקצאת קיצור מקשים למאקרו, ודא שהוא אינו בשימוש כסטנדרט באקסל (לדוגמה, Ctrl + C). אם תבחר בקיצור מקלדת שכבר קיים, הוא יוקצה מחדש למאקרו, וכתוצאה מכך המשתמש עלול להפעיל את המאקרו בטעות.

היקף נוהל VBA

חלק 2 של מדריך זה דן בהיקף המשתנים והקבועים ובתפקידן של מילות המפתח. הציבור и פְּרָטִי. ניתן להשתמש במילות מפתח אלה גם עם נהלי VBA:

Public Sub AddToCells(i As Integer) ... End Sub
אם להצהרת הנוהל קודמת מילת המפתח הציבור, אז ההליך יהיה זמין לכל המודולים בפרויקט VBA זה.
Private Sub AddToCells(i As Integer) ... End Sub
אם להצהרת הנוהל קודמת מילת המפתח פְּרָטִי, אז הליך זה יהיה זמין רק עבור המודול הנוכחי. לא ניתן לקרוא לו בכל מודול אחר או מחוברת עבודה של Excel.

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

יציאה מוקדמת מהליכי VBA "פונקציה" ו-"Sub"

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

פונקציה VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 אם sVAT_Rate <= 0 Then MsgBox "ציפה ערך חיובי של sVAT_Rate אבל קיבל " & sVAT_Rate יציאה פונקציה סיום אם ... End Function

שימו לב שלפני השלמת ההליך פונקציה - VAT_Amount, פונקציית VBA מובנית מוכנסת לקוד MsgBox, המציג חלון אזהרה קופץ למשתמש.

השאירו תגובה