VBA

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

מאפייני השפה

שפת 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 קשור קשר הדוק ל-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, ולא קיימים חלק מהאופרטורים המקובלים.

קוד זדוני

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