Visual Basic para Aplicaciones

Compartir Imprimir Citar
Aplicación del lenguaje de programación basado en eventos de Microsoft Visual Basic 6

Visual Basic para aplicaciones (VBA) es una implementación del lenguaje de programación basado en eventos de Microsoft Visual Basic 6.0 integrado en la mayoría de las aplicaciones de escritorio de Microsoft Office. Aunque se basa en Visual Basic anterior a.NET, que Microsoft ya no admite ni actualiza, la implementación de VBA en Office continúa actualizándose para admitir nuevas funciones de Office. VBA se utiliza para el desarrollo profesional y de usuario final debido a su facilidad de uso percibida, la amplia base de usuarios instalada de Office y su extenso legado en los negocios.

Visual Basic for Applications permite crear funciones definidas por el usuario (UDF), automatizar procesos y acceder a la API de Windows y otras funciones de bajo nivel a través de bibliotecas de vínculos dinámicos (DLL). Reemplaza y amplía las capacidades de los lenguajes de programación de macros específicos de aplicaciones anteriores, como WordBASIC de Word. Se puede utilizar para controlar muchos aspectos de la aplicación host, incluida la manipulación de funciones de la interfaz de usuario, como menús y barras de herramientas, y el trabajo con formularios de usuario o cuadros de diálogo personalizados.

Como sugiere su nombre, VBA está estrechamente relacionado con Visual Basic y utiliza la Biblioteca de tiempo de ejecución de Visual Basic. Sin embargo, el código VBA normalmente solo puede ejecutarse dentro de una aplicación host, en lugar de como un programa independiente. Sin embargo, VBA puede controlar una aplicación desde otra mediante OLE Automation. Por ejemplo, VBA puede crear automáticamente un informe de Microsoft Word a partir de datos de Microsoft Excel que Excel recopila automáticamente de sensores sondeados. VBA puede usar, pero no crear, archivos DLL de ActiveX/COM, y las versiones posteriores agregan soporte para módulos de clase.

VBA está integrado en la mayoría de las aplicaciones de Microsoft Office, incluido Office para Mac OS X (excepto la versión 2008) y otras aplicaciones de Microsoft, incluidos Microsoft MapPoint y Microsoft Visio. VBA también se implementa, al menos parcialmente, en aplicaciones publicadas por empresas distintas de Microsoft, incluidas ArcGIS, AutoCAD, CorelDraw, Kingsoft Office, LibreOffice, Reflection, SolidWorks, WordPerfect y UNICOM System Architect (que admite VBA 7.1).

Diseño

El código escrito en VBA se compila en Microsoft P-Code (pseudocódigo), un lenguaje intermedio patentado, que las aplicaciones host (Access, Excel, Word, Outlook y PowerPoint) almacenan como un flujo separado en el almacenamiento estructurado COM. (por ejemplo, .doc o .xls) independientemente de los flujos de documentos. Luego, el código intermedio es ejecutado por una máquina virtual (alojada por la aplicación host). A pesar de su parecido con muchos dialectos BASIC antiguos (particularmente Microsoft BASIC, del cual se deriva indirectamente), VBA es incompatible con cualquiera de ellos excepto con Visual Basic, donde el código fuente de los módulos y clases de VBA se puede importar directamente y que comparte el mismo biblioteca y máquina virtual. La compatibilidad finaliza con la versión 6 de Visual Basic; VBA es incompatible con Visual Basic.NET (VB.NET). VBA es propiedad de Microsoft y, aparte de la interfaz COM, no es un estándar abierto.

Automatización

La interacción con la aplicación host utiliza Automatización OLE. Por lo general, la aplicación host proporciona una biblioteca de tipos y documentación de la interfaz de programación de aplicaciones (API) que documentan cómo los programas VBA pueden interactuar con la aplicación. Esta documentación se puede examinar desde dentro del entorno de desarrollo de VBA utilizando su Examinador de objetos.

Los programas de Visual Basic para Aplicaciones que están escritos para usar la interfaz de Automatización OLE de una aplicación no se pueden usar para automatizar una aplicación diferente, incluso si esa aplicación aloja el tiempo de ejecución de Visual Basic, porque las interfaces de Automatización OLE serán diferentes. Por ejemplo, un programa VBA escrito para automatizar Microsoft Word no se puede usar con un procesador de texto diferente, incluso si ese procesador de texto aloja VBA.

Por el contrario, se pueden automatizar varias aplicaciones desde un único host mediante la creación de objetos de aplicación dentro del código VBA. Las referencias a las diferentes bibliotecas deben crearse dentro del cliente VBA antes de que cualquiera de los métodos, objetos, etc. estén disponibles para su uso en la aplicación. Esto se logra a través de lo que se conoce como vinculación anticipada o tardía. Estos objetos de aplicación crean el enlace OLE a la aplicación cuando se crean por primera vez. Los comandos a las diferentes aplicaciones deben hacerse explícitamente a través de estos objetos de aplicación para que funcionen correctamente.

Como ejemplo, el código VBA escrito en Microsoft Access puede establecer referencias a las bibliotecas de Excel, Word y Outlook; esto permite crear una aplicación que, por ejemplo, ejecuta una consulta en Access, exporta los resultados a Excel y los analiza, y luego formatea la salida como tablas en un documento de Word o las envía como un correo electrónico de Outlook.

Los programas VBA se pueden adjuntar a un botón de menú, una macro, un atajo de teclado o un evento OLE/COM, como la apertura de un documento en la aplicación. El lenguaje proporciona una interfaz de usuario en forma de UserForms, que puede albergar controles ActiveX para funcionalidad adicional.

La automatización de la comunicación entre procesos incluye Dynamic Data Exchange (DDE) y RealTimeData (RTD) que permite llamar a un servidor de automatización del Modelo de objetos componentes (COM) para datos financieros o científicos dinámicos o en tiempo real.

Preocupaciones de seguridad

Al igual que con cualquier lenguaje de programación común, las macros de VBA se pueden crear con intenciones maliciosas. Con VBA, la mayoría de las funciones de seguridad están en manos del usuario, no del autor. El usuario puede acceder a las opciones de la aplicación host de VBA. El usuario que ejecuta cualquier documento que contenga macros de VBA puede preestablecer el software con las preferencias del usuario. Los usuarios finales pueden protegerse de los ataques al deshabilitar la ejecución de macros en una aplicación o al otorgar permiso para que un documento ejecute código VBA solo si están seguros de que se puede confiar en la fuente del documento.

En febrero de 2022, Microsoft anunció su plan para bloquear macros VBA en archivos descargados de Internet de forma predeterminada en una variedad de aplicaciones de Office debido a su uso generalizado para propagar malware.

Historial de versiones

Desarrollo

A partir del 1 de julio de 2007, Microsoft ya no ofrece licencias de distribución de VBA a nuevos clientes. Microsoft tenía la intención de agregar lenguajes basados en.NET a la versión actual de VBA desde el lanzamiento de.NET Framework, cuyas versiones 1.0 y 1.1 incluían una tecnología de ejecución de secuencias de comandos llamada Script para.NET Framework.. Visual Studio.NET 2002 y 2003 SDK contenían un IDE de secuencias de comandos independiente denominado Visual Studio for Applications (VSA) compatible con VB.NET. Una de sus características importantes era que las interfaces de la tecnología estaban disponibles a través de secuencias de comandos activas (VBScript y JScript), lo que permitía que incluso las aplicaciones que no conocían.NET se codificaran a través de lenguajes.NET. Sin embargo, VSA quedó obsoleto en la versión 2.0 de.NET Framework, por lo que no dejó una ruta de actualización clara para las aplicaciones que desean compatibilidad con Active Scripting (aunque se pueden crear "scripts" en C#, VBScript y otros lenguajes.NET, que se puede compilar y ejecutar en tiempo de ejecución a través de bibliotecas instaladas como parte del tiempo de ejecución estándar.NET).

Microsoft eliminó la compatibilidad con VBA para Microsoft Office 2008 para Mac. VBA se restauró en Microsoft Office para Mac 2011. Microsoft dijo que no tiene planes de eliminar VBA de la versión de Windows de Office.

Con Office 2010, Microsoft presentó VBA7, que contiene un tipo de datos de puntero verdadero: LongPtr. Esto permite hacer referencia al espacio de direcciones de 64 bits. La instalación de 64 bits de Office 2010 no es compatible con los controles comunes de MSComCtl (TabStrip, Toolbar, StatusBar, ProgressBar, TreeView, ListViews, ImageList, Slider, ImageComboBox) o MSComCt2 (Animation, UpDown, MonthView, DateTimePicker, FlatScrollBar), por lo que son heredados. El código de 32 bits portado a código VBA de 64 bits que depende de estos controles comunes no funcionará. Esto no afectó a la versión de 32 bits de Office 2010. Microsoft finalmente lanzó una versión de 64 bits de MSComCtl con la actualización de Office 2016 del 27 de julio de 2017.