VBA

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

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

מאפייני השפה[עריכת קוד מקור | עריכה]

שפת 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 כתוסף לתוכנת הוורד. תוכנת אקסס מגיעה עם שפע של אשפים שנוצרו בשפה זו בידי מיקרוסופט עצמה, וקיימים בה מספר רב של אשפים שנוצרו בידי חברות צד שלישי. אשפים אלו נועדו להקל על ההליך של פיתוח מסדי נתונים בהיבטים השונים. אך לא רק מתכנתים משתמשים בשפה זו, אלא למעשה כל משתמש שיוצר מאקרו באופיס, יוצר למעשה ללא ידיעתו שגרה בשפה זו, שמקליטה את רצף ההוראות שנתן לתוכנה ושומרת אותם לשימוש עתידי.

תחביר[עריכת קוד מקור | עריכה]

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

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

   Dim str1 As String
   Dim int1 As Integer
   str1 = "100"
   int1 = str1
 
   Dim bytArr() As Byte
   bytArr = "I am a string."
   str1 = bytArr

קוד זדוני[עריכת קוד מקור | עריכה]

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