Visual Basic for Applications

Visual Basic for Applications(VBA) is an implementation ofMicrosoft's event-driven programming languageVisual Basic 6.0built into most desktopMicrosoft Officeapplications. Although based on pre-.NET Visual Basic, which is no longer supported or updated by Microsoft (except under Microsoft's "It Just Works" support which is for the full lifetime of supported Windows versions, including Windows 10 and Windows 11), the VBA implementation in Office continues to be updated to support new Office features.[1][2]VBA is used for professional andend-user developmentdue to its perceived ease-of-use, Office's vast installed userbase, and extensive legacy in business.

Visual Basic for Applications
ParadigmMulti-paradigm
DeveloperMicrosoft
First appeared1993;31 years ago(1993)
Stable release
Typing disciplineStatic/Dynamic Hybrid,Strong/Weak Hybrid
OSMicrosoft Windows,macOS
LicenseCommercialproprietary software
Websitelearn.microsoft.com/en-us/office/vba,%20https://learn.microsoft.com/de-de/office/vba
Influenced by
QuickBASIC,Visual Basic

Visual Basic for Applications enables buildinguser-defined functions(UDFs), automating processes and accessingWindows APIand other low-level functionality throughdynamic-link libraries(DLLs). It supersedes and expands on the abilities of earlier application-specificmacroprogramming languages such asWord'sWordBASIC.It can be used to control many aspects of the host application, including manipulating user interface features, such as menus and toolbars, and working with custom user forms or dialog boxes.

As its name suggests, VBA is closely related to Visual Basic and uses the Visual Basic Runtime Library. However, VBA code normally can only run within a host application, rather than as astandalone program.VBA can, however, control one application from another usingOLE Automation.For example, VBA can automatically create aMicrosoft Wordreport fromMicrosoft Exceldata that Excel collects automatically from polled sensors. VBA can use, but not create,ActiveX/COMDLLs, and later versions add support for class modules.

VBA is built into mostMicrosoft Officeapplications, including Office for Mac OS X (except version 2008), and other Microsoft applications, includingMicrosoft MapPointandMicrosoft Visio.VBA is also implemented, at least partially, in applications published by companies other than Microsoft, includingArcGIS,AutoCAD,Collabora Online,CorelDraw,Kingsoft Office,LibreOffice,[3]SolidWorks,[4]WordPerfect,and UNICOMSystem Architect(which supports VBA 7.1).

Design

edit

Code written in VBA iscompiled[5]toMicrosoft P-Code(pseudo-code), a proprietaryintermediate language,which the host applications (Access,Excel,Word,Outlook,andPowerPoint) store as a separatestreaminCOM Structured Storagefiles (e.g.,.docor.xls) independent of the document streams. The intermediate code is then executed[5]by avirtual machine(hosted by the host application). Compatibility ends with Visual Basic version 6; VBA is incompatible withVisual Basic.NET(VB.NET). VBA is proprietary to Microsoft and, apart from the COM interface, is not anopen standard.

Automation

edit

Interaction with the host application usesOLE Automation.Typically, the host application provides atypelibrary andapplication programming interface(API) documentation which document how VBA programs can interact with the application. This documentation can be examined from inside the VBA development environment using its Object Browser.

Visual Basic for Applications programs which are written to use the OLE Automation interface of one application cannot be used to automate a different application, even if that application hosts the Visual Basic runtime, because the OLE Automation interfaces will be different. For example, a VBA program written to automate Microsoft Word cannot be used with a different word processor, even if that word processor hosts VBA.

Conversely, multiple applications can be automated from the one host by creating Application objects within the VBA code. References to the different libraries must be created within the VBA client before any of the methods, objects, etc. become available to use in the application. This is achieved through what is referred to as Early or Late Binding. These application objects create the OLE link to the application when they are first created. Commands to the different applications must be done explicitly through these application objects in order to work correctly.

As an example, VBA code written in Microsoft Access can establish references to the Excel, Word and Outlook libraries; this allows creating an application that – for instance – runs a query in Access, exports the results to Excel and analyzes them, and then formats the output as tables in a Word document or sends them as an Outlook email.

VBA programs can be attached to a menu button, amacro,akeyboard shortcut,or an OLE/COM event, such as the opening of a document in the application. The language provides a user interface in the form of UserForms, which can hostActiveXcontrols for added functionality.

Inter-process communicationautomation includes theDynamic Data Exchange(DDE) andRealTimeData(RTD) which allows calling aComponent Object Model(COM) automation server for dynamic or realtime financial or scientific data.[6]

Security concerns

edit

As with any common programming language, VBA macros can be created with malicious intent. Using VBA, most of thesecurityfeatures lie in the hands of the user, not the author. The VBA host application options are accessible to the user. The user who runs any document containing VBA macros can preset the software with user preferences.End-userscan protect themselves from attack by disabling macros from running in an application or by granting permission for a document to run VBA code only if they are sure that the source of the document can be trusted.

In February 2022, Microsoft announced its plan to block VBA macros in files downloaded from the Internet by default in a variety of Office apps due to their widespread use to spread malware.[7]

Version history

edit
  • VBA was first launched with MS Excel 5.0 in 1993. It became an instant success among developers to create corporate solutions using Excel. Inclusion of VBA with Microsoft Project, Access and Word replacing Access BASIC andWordBASICrespectively made it more popular.
  • VBA 4.0 is the next famous release with a totally upgraded version compared to previous one. Released in 1996, it is written in C++ and became an object oriented language.
  • VBA 5.0 was launched in 1997 along with all of MS Office 97 products. The only exception for this was Outlook 97 which usedVBScript.
  • VBA 6.0 and VBA 6.1 were launched in 1999, notably with support for COM add-ins in Office 2000. VBA 6.2 was released alongside Office 2000 SR-1.
  • VBA 6.3 was released after Office XP, VBA 6.4 followed Office 2003 and VBA 6.5 was released with Office 2007.
  • Office 2010 includes VBA 7.0. There are no new features in VBA 7 for developers compared to VBA 6.5 except for 64-bit support. However, after VBA 6.5/Office 2007, Microsoft stopped licensing VBA for other applications.
  • Office 2013, Office 2016, Office 2019 and Office 2021 include VBA 7.1.

Development

edit

As of July 1, 2007, Microsoft no longer offers VBA distribution licenses to new customers. Microsoft intended to add.NET-based languages to the current version of VBA ever since the release of the.NET Framework,[8]of which versions 1.0 and 1.1 included a scripting runtime technology namedScript for the.NET Framework.[9]Visual Studio.NET 2002 and 2003 SDK contained a separate scripting IDE calledVisual Studio for Applications(VSA) that supported VB.NET.[10][11][12]One of its significant features was that the interfaces to the technology were available viaActive Scripting(VBScriptandJScript), allowing even.NET-unaware applications to be scripted via.NET languages. However, VSA was deprecated in version 2.0 of the.NET Framework,[12]leaving no clear upgrade path for applications desiring Active Scripting support (although "scripts" can be created inC#,VBScript,and other.NET languages, which can becompiledand executed at run-time vialibrariesinstalled as part of the standard.NET runtime).

Microsoft dropped VBA support forMicrosoft Office 2008 for Mac.[13][14]VBA was restored inMicrosoft Office for Mac 2011.Microsoft said that it has no plan to remove VBA from the Windows version of Office.[15][16]

WithOffice 2010,Microsoft introduced VBA7, which contains a true pointer data type: LongPtr. This allows referencing 64-bit address space. The 64-bit install of Office 2010 does not support common controls of MSComCtl (TabStrip, Toolbar, StatusBar, ProgressBar, TreeView, ListViews, ImageList, Slider, ImageComboBox) or MSComCt2 (Animation, UpDown, MonthView, DateTimePicker, FlatScrollBar), so legacy 32-bit code ported to 64-bit VBA code that depends on these common controls will not function. This did not affect the 32-bit version Office 2010.[17]Microsoft eventually released a 64-bit version of MSComCtl with the July 27th, 2017 update to Office 2016.[18]

See also

edit

References

edit
  1. ^"Compatibility Between the 32-bit and 64-bit Versions of Office 2010".msdn.microsoft.com.
  2. ^o365devx."What's new for VBA in Office 2019".docs.microsoft.com.Retrieved2022-05-02.{{cite web}}:CS1 maint: numeric names: authors list (link)
  3. ^"Support for VBA Macros".The Document Foundation - LibreOffice.Retrieved3 January2023.
  4. ^"2016 SolidWorks Help – VBA".help.solidworks.com.Retrieved2016-07-25.
  5. ^ab"ACC: Visual/Access Basic Is Both a Compiler and an Interpreter".Microsoft. 2012. Archived fromthe originalon 2012-10-21.
  6. ^"How to set up and use the RTD function in Excel".msdn.microsoft.com.
  7. ^"Microsoft to Block Office VBA Macros by Default".The Verge.Retrieved2022-09-26.
  8. ^"Visual Studio for Applications".Archived fromthe originalon 2007-12-17.
  9. ^"Introducing Visual Studio for Applications".msdn.microsoft.com.
  10. ^"Script Happens.NET".msdn.microsoft.com.
  11. ^"Microsoft Takes Wraps Off VSA Development Technology".Archived fromthe originalon 2007-12-17.
  12. ^ab"VSA scripting in.NET".Archived fromthe originalon 2007-02-11.
  13. ^"WWDC: Microsoft updates Universal status of Mac apps".Macworld.2006-08-07.Retrieved2007-05-25.
  14. ^"What is Microsoft Office and Office 365 – FAQs".
  15. ^"The Reports of VBA's Demise Have Been Greatly Exaggerated".
  16. ^"Clarification on VBA Support".Archived fromthe originalon 2008-04-11.
  17. ^"Compatibility Between the 32-bit and 64-bit Versions of Office 2010".msdn.microsoft.com.
  18. ^"Release notes for Monthly Channel releases in 2017".learn.microsoft.com.Retrieved2022-11-13.