VBA

שפת תכנות

VBA (ראשי תיבות: Visual Basic for Applications, ויז'ואל בייסיק ליישומים) היא שפת תכנות מונחה-אירועים ותסריט דינמית ומימוש ודיאלקט של חברת מיקרוסופט לשפת Visual Basic 6, הכוללת סביבת פיתוח משולבת (VBE). שפה זו מאפשרת הרחבת היכולות של תוכנה קיימת מעבר למה שקבע המפתח שלה, באמצעות יצירת סקריפטים לתוכנה בזמן ריצה. שימוש נפוץ בתוכנה זו נעשה בחבילת האופיס של מיקרוסופט: וורד, אקסל ואקסס, וגם בפרוז'קט וויז'יו. חברות צד שלישי יכולות לספק באמצעות ה-VBA תוספות (Add-ins) המרחיבות את היכולות של התוכנות המקוריות באמצעות טכנולוגית COM. חברות תוכנה יכולות לרכוש רישיון ממיקרוסופט להוסיף את השפה וסביבת הפיתוח שלה לתוכנה שהן מפתחות.

VBA
תמונת מסך של סביבת פיתוח משולבת של VBA באקסס. סביבת הפיתוח זהה בכל התוכנות ומודל האובייקטים שאליו מתייחסת השפה הוא זה שמשתנה, לפי מה שמנגישה התוכנה המארחת
תמונת מסך של סביבת פיתוח משולבת של VBA באקסס. סביבת הפיתוח זהה בכל התוכנות ומודל האובייקטים שאליו מתייחסת השפה הוא זה שמשתנה, לפי מה שמנגישה התוכנה המארחת
תמונת מסך של סביבת פיתוח משולבת של VBA באקסס. סביבת הפיתוח זהה בכל התוכנות ומודל האובייקטים שאליו מתייחסת השפה הוא זה שמשתנה, לפי מה שמנגישה התוכנה המארחת
פרדיגמות תכנות מרובה פרדיגמות עריכת הנתון בוויקינתונים
תאריך השקה 1993 עריכת הנתון בוויקינתונים
מפתח מיקרוסופט עריכת הנתון בוויקינתונים
הושפעה על ידי ויז'ואל בייסיק עריכת הנתון בוויקינתונים
אתר רשמי
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית
הדגמה של שימוש ב-VBA באקסל. פונקציה מוגדרת בידי משתמש. הפונקציה sq(x) שנכתבה על ידי המשתמש בעורך VBA, מעלה בחזקה ריבועית נתון ממשתנה X (שדה B2), ורושמת אותו למשתנה Y (שדה B1).

מאפייני השפה

עריכה

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

שפת ה-VBA מאפשרת יצירת פונקציות מוגדרות בידי משתמש (UDF), אוטומציה של תהליכים, גישה ל-Windows API, ועוד פונקציונליות ברמה נמוכה באמצעות ספריות קישור דינמיות (DLL). שפה זו מחליפה ומרחיבה את היכולות של שפת הסקריפטים הקודמת כמו ה-Word WordBasic. ניתן להשתמש בה כדי לשלוט בהיבטים רבים של היישום המארח, כולל מניפולציה לממשק משתמש כשינוי תפריטים וסרגלי כלים, ועבודה עם טופס משתמש מותאם (הכלול בסביבה) או הצגת תיבות דו-שיח.

קוד שנכתב ב-VBA מהודר לשפת ביניים קניינית הנקראת P-קוד (קוד ארוז), שבו היישום המארח (Access, Excel, Word, Outlook, and PowerPoint) מאחסן את קוד הביניים כזרם נפרד, במבנה אחסון של קובץ COM עצמאי, במסמך של התוכנה המריצה. ולאחר מכן קוד הביניים מורץ באמצעות מכונה וירטואלית, שמתארחת בתוכנת היישום המארח. אף שניתן לקמפל את הקוד, ניתן להריץ את הקוד ללא קימפול, ואף לשנותו תוך כדי הרצה של התוכנה, מבלי לעבוד למוד תכנותי. דבר שמאוד נוח וידידותי לכותב הסקריפטים.

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

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

הקשרי השפה ושימושיה

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

כפי שהשם מרמז, ה-VBA קשור קשר הדוק ל-Visual Basic ומשתמש בספריית זמן ריצה של Visual Basic, אבל הדבר נעשה בהפעלת קוד ביישום מארח ולא כתוכנה עצמאית, בדרך דומה לפעולה של JavaScript בדפדפן האינטרנט. עם זאת, הדבר מאפשר להשתמש בשפה כדי לשלוט ביישום אחד למשנהו באמצעות אוטומציית OLE. לדוגמה, ניתן ליצור באופן אוטומטי מסמך וורד מתוך דוח אקסל, אשר נאספו באופן אוטומטי על ידי Excel, מחיישני תצפית שהשתתפו בסקר, ניתן להוסיף פונקציות משתמש לתוכנת Excel, וניתן להפעיל משפטי SQL באקסס (Embedded SQL) על בסיס הנתונים שקיים במערכת. יש ב-VBA יכולת להשתמש (אך לא ליצור) בטכנולוגיית ActiveX/COM ובקובצי DLL, ובגרסות מאוחרות יותר נוספה תמיכה עבור מודול מחלקתי.

ה-VBA מובנה בתוך רוב תוכנות Microsoft Office, לרבות יישומי Office for Mac OS X (חוץ מהגרסה 2008) ויישומים אחרים של מיקרוסופט, כגון Microsoft MapPoint וMicrosoft Visio, פבלישר וMicrosoft Outlook, והוא מיושם לפחות באופן חלקי ביישומים אחרים, כגון אוטוקאד, WordPerfect ו-ArcGIS. למעשה כל חברה שרוצה להשתמש ב-VBA להרחיב ולהגמיש את יכולות התוכנות שהיא מייצרת, יכולה לרכוש רישיון ממיקרוסופט להשתמש בשפה ובסביבת הפיתוח שלה בזמן ריצה.

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

תחביר

עריכה

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

השפה תומכת בקבועים, אופרטורים (שפועלים גם על סיביות), משתנים, Enumeration, מבנים (Type), פונקציות (Function), שגרות (Sub). מלבד המשתנים הפרימיטיביים בשפה זו יש תמיכה במשתנים מורכבים כתאריך (Date), מטבע (Currency), אובייקט (Object), משתנה (Variant), שמשתנה לפי טיפוס הערך, ויכול להכיל ערך מכל סוג ומשתנה אוסף (Collection) שיכול להכיל איברים שונים. במקרה שלא הוגדר משתנה באופן מפורש, הוא יהיה מסוג Variant.

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

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

   Dim str1 As String
   Dim int1 As Integer
   str1 = "100"
   int1 = str1

   Dim bytArr() As Byte
   bytArr = "I am a string."
   str1 = bytArr

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

ספריות והרחבות

עריכה

ניתן להפעיל בשפה זו הרחבות שונות שנוצרו למערכות דומות במטרה להוסיף לה יכולות למשל:

  • Microsoft Forms 2.0 Object Library: מאפשר גישה לפקדים חלונות שונים.
  • פקדים משותפים MSComCtl וMSComCt2

(TabStrip, Toolbar, StatusBar, ProgressBar, TreeView, ListViews, ImageList, Slider, ImageComboBox) (Animation, UpDown, MonthView, DateTimeBar, FlatScroll),

  • Microsoft Internet Controls: מאפשר גישה לפקד דפדפן אינטרנט לגלישה באתרים.
  • FSO - ספריה לעבודה עם קבצים
  • VBSCRIPT - ספריה לשימוש בביטויים רגולטורים

קוד זדוני

עריכה

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

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

קישורים חיצוניים

עריכה