VBA - El socio de trabajo de Visual Basic

Una de las cualidades más sobresalientes de Visual Basic es que es un completar entorno de desarrollo. ¡Sea lo que sea que quieras hacer, hay un 'sabor' de Visual Basic para ayudarte a hacer el trabajo! Puede usar Visual Basic para escritorio y desarrollo móvil y remoto (VB.NET), scripting (VBScript) y desarrollo de Office (VBA !) Si ha probado VBA y quiere saber más sobre cómo usarlo, este es el tutorial para ti. (Este curso se basa en la versión de VBA que se encuentra en Microsoft Office 2010.)

Si está buscando un curso en Microsoft Visual Basic .NET, también ha encontrado el lugar correcto. Echa un vistazo: Visual Basic .NET 2010 Express: un tutorial "desde cero"

VBA como concepto general será cubierto en este artículo. ¡Hay más en VBA de lo que piensas! También puede encontrar artículos sobre las hermanas Office VBA:

Básicamente, existen dos formas de desarrollar programas que pueden funcionar con aplicaciones de Office: VBA y VSTO. En octubre de 2003, Microsoft introdujo una mejora en el entorno de programación profesional Visual Studio .NET llamado Visual Studio Tools for Office - VSTO. Pero a pesar de que VSTO aprovecha las ventajas considerables de .NET en Office, VBA sigue siendo más popular que VSTO. VSTO requiere el uso de la versión Professional o superior de Visual Studio, que probablemente le costará más que la aplicación de Office que está utilizando, además de la aplicación de Office. Pero como VBA está integrado con la aplicación de Office de host, no necesita nada más..

VBA es utilizado principalmente por expertos de Office que desean que su trabajo sea más rápido y fácil. Rara vez ve grandes sistemas escritos en VBA. VSTO, por otro lado, es utilizado por programadores profesionales en organizaciones más grandes para crear complementos que pueden ser bastante sofisticados. Es más probable que una aplicación de un tercero, como una empresa de papel para Word o una empresa de contabilidad para Excel, se escriba utilizando VSTO.

En su documentación, Microsoft señala que existen básicamente tres razones para usar VBA:

-> Automatización y repetición: las computadoras pueden hacer lo mismo una y otra vez mucho mejor y más rápido que las personas.

-> Extensiones a la interacción del usuario: ¿Desea sugerir exactamente cómo alguien debe formatear un documento o guardar un archivo? VBA puede hacer eso. ¿Quieres validar lo que alguien ingresa? VBA también puede hacer eso.

-> Interacción entre aplicaciones de Office 2010: un artículo posterior de esta serie se llama Word y Excel Working Together. Pero si esto es lo que necesita, puede considerar Automatización de oficinas, es decir, escribir el sistema usando VB.NET y luego usar las funciones de una aplicación de Office como Word o Excel según sea necesario.

Microsoft ha declarado que continuarán admitiendo VBA y aparece destacado en el Oficial Hoja de ruta de desarrollo de Microsoft Office 2010. Por lo tanto, tiene tanta seguridad como Microsoft ofrece que su inversión en el desarrollo de VBA no será obsoleta en el futuro cercano..

Por otro lado, VBA es el último producto restante de Microsoft que depende de la tecnología VB6 "COM". ¡Ya tiene más de veinte años! En años humanos, eso lo haría más viejo que Lestat the Vampire. Puede verlo como "probado, probado y verdadero" o puede pensar que es "antiguo, desgastado y obsoleto". Tiendo a favor de la primera descripción, pero debes estar al tanto de los hechos.

Lo primero que hay que entender es la relación entre VBA y las aplicaciones de Office como Word y Excel. La aplicación de Office es un anfitrión para VBA. Un programa VBA nunca se puede ejecutar por sí mismo. VBA se desarrolla en el entorno host (utilizando el Desarrollador pestaña en la cinta de aplicaciones de Office) y debe ejecutarse como parte de un documento de Word, un libro de Excel, una base de datos de Access u otro host de Office.

La forma en que se usa VBA también es diferente. En una aplicación como Word, VBA se usa principalmente como una forma de acceder a los objetos del entorno host, como acceder a los párrafos de un documento con el objeto Word.Document.Paragraphs de Word. Cada entorno de host aporta objetos únicos que no están disponibles en los otros entornos de host. (Por ejemplo, no hay un "libro de trabajo" en un documento de Word. Un libro de trabajo es exclusivo de Excel). El código de Visual Basic está principalmente allí para permitir el uso de objetos personalizados para cada aplicación host de Office.

La fusión entre VBA y el código específico del host se puede ver en este ejemplo de código (tomado de la base de datos de ejemplo de Microsoft Northwind) donde el código puramente VBA se muestra en rojo y el código específico de Access se muestra en azul. El código rojo sería el mismo en Excel o Word, pero el código azul es exclusivo de esta aplicación de Access..

VBA en sí es casi lo mismo que ha sido durante años. La forma en que se integra con la aplicación de Office host y el sistema de ayuda se ha mejorado más.

La versión 2010 de Office no muestra la pestaña Desarrollador de forma predeterminada. La pestaña Desarrollador lo lleva a la parte de la aplicación donde puede crear programas VBA, por lo que lo primero que debe hacer es cambiar esa opción. Simplemente vaya a la pestaña Archivo, Opciones, Personalizar cinta de opciones y haga clic en el cuadro Desarrollador en las pestañas principales.

El sistema de ayuda funciona mucho más suavemente que en versiones anteriores. Puede obtener ayuda para sus preguntas de VBA ya sea sin conexión, desde un sistema que esté instalado con su aplicación de Office o en línea desde Microsoft a través de Internet. Las dos interfaces están diseñadas para parecerse mucho:

--------
Haga clic aquí para mostrar la ilustración.
--------

Si su conexión a Internet es rápida, la ayuda en línea le dará más y mejor información. Pero la versión instalada localmente probablemente será más rápida y en la mayoría de los casos es igual de buena. Es posible que desee que la ayuda local sea la predeterminada y luego usar la ayuda en línea si la versión local no le proporciona lo que desea. La forma más rápida de conectarse es simplemente seleccionar "All Word" (o "All Excel" u otra aplicación) del menú desplegable Buscar en la ayuda. Esto se conectará de inmediato y realizará la misma búsqueda, pero no restablecerá su selección predeterminada.

--------
Haga clic aquí para mostrar la ilustración.
--------

En la siguiente página, comenzamos con cómo crear realmente un programa VBA.

Cuando VBA es "alojado" por una aplicación como Word o Excel, el programa "vive" en el archivo de documento que utiliza el host. Por ejemplo, en Word puede guardar su 'macro de Word' (es no una 'macro', pero no discutiremos sobre terminología en este momento) ni en un documento de Word ni en una plantilla de Word.

Ahora suponga que este programa VBA se crea en Word (este simple programa simplemente cambia la fuente a negrita para una línea seleccionada) y se guarda en un documento de Word:

 Sub AboutMacro () "AboutMacro Macro 'Macro grabada el 9/9/9999 por Dan Mabbutt' Selection.HomeKey Unit: = wdStory Selection.EndKey Unit: = wdLine, Extend: = wdExtend Selection.Font.Bold = wdToggle Selection.EndKey Unit: = wdStory End Sub 

En versiones anteriores de Office, podía ver claramente el código VBA almacenado como parte del archivo de documento en el documento de Word guardado al verlo en el Bloc de notas donde se puede ver todo en el documento de Word. Esta ilustración se produjo con una versión anterior de Word porque Microsoft cambió el formato del documento en la versión actual y el código del programa VBA ya no aparece claramente como texto sin formato. Pero el director es el mismo. Del mismo modo, si crea una hoja de cálculo de Excel con una "macro de Excel", se guardará como parte de un archivo .xlsm.

--------
Haga clic aquí para mostrar la ilustración.
--------

VBA y seguridad

Uno de los trucos de virus informáticos más efectivos en el pasado fue insertar código VBA malicioso en un documento de Office. Con versiones anteriores de Office, cuando se abría un documento, el virus podía ejecutarse automáticamente y crear estragos en su máquina. Este agujero de seguridad abierto en Office estaba comenzando a afectar las ventas de Office y eso realmente llamó la atención de Microsoft. Con la generación actual de Office 2010, Microsoft ha tapado completamente el agujero. Además de las mejoras mencionadas aquí, Microsoft ha mejorado la seguridad de Office de formas que quizás ni siquiera note hasta el nivel de hardware. Si no está seguro de usar VBA porque escuchó que no era seguro, tenga la seguridad de que Microsoft ha hecho un esfuerzo adicional para cambiar eso ahora.

El cambio más importante fue crear un tipo de documento especial solo para documentos de Office que incluyen programas VBA. En Word, por ejemplo, MyWordDoc.docx no puede contener un programa VBA porque Word no permitirá programas en un archivo guardado con una extensión de archivo "docx". El archivo debe guardarse como un "MyWordDoc.docm" para que la programación de VBA se permita como parte del archivo. En Excel, la extensión del archivo es ".xlsm".

Para acompañar este tipo de documento mejorado, Microsoft creó un nuevo subsistema de seguridad en Office llamado Trust Center. Esencialmente, puede personalizar cómo su aplicación de Office trata los documentos que contienen código VBA con gran detalle. Abre el Centro de confianza desde la pestaña Desarrollador en su aplicación de Office haciendo clic en Macro Seguridad en la sección Código de la cinta.

--------
Haga clic aquí para mostrar la ilustración.
--------

Algunas de las opciones están diseñadas para "fortalecer" sus aplicaciones de Office para que el código malicioso no se ejecute y otras están diseñadas para facilitar a los desarrolladores y usuarios el uso de VBA sin que la seguridad ralentice innecesariamente las cosas. Como puede ver, hay muchas formas en que puede personalizar la seguridad y recorrerlas está mucho más allá del alcance de este artículo. Afortunadamente, el sitio de Microsoft tiene una extensa documentación sobre este tema. Y también es una suerte que la configuración de seguridad predeterminada sea buena para la mayoría de los requisitos.

Dado que VBA está vinculado a la aplicación de Office host, debe ejecutarlo allí. Ese tema se trata a partir de la página siguiente..

¿Cómo ejecuto una aplicación VBA?

Esa es realmente una muy buena pregunta porque es la primera que harán los usuarios de su aplicación. Básicamente hay dos formas:

-> Si decide no usar un control, como un Botón, para iniciar el programa, debe usar el comando Macros en la cinta de opciones (pestaña Desarrollador, grupo Código). Seleccione el programa VBA y haga clic en Ejecutar. Pero esto puede parecer demasiado para algunos de sus usuarios. Por ejemplo, es posible que no desee que la pestaña Desarrollador esté disponible para ellos. En ese caso…

-> Debe agregar algo en lo que el usuario pueda hacer clic o escribir para iniciar la aplicación. En este artículo, veremos el control Button. Pero podría ser hacer clic en un acceso directo, un icono en una barra de herramientas o incluso el acto de ingresar datos. Estos se llaman eventos y lo que escribiremos en este y otros artículos es código de evento - código de programa que se ejecuta automáticamente cuando ocurre un evento específico, como hacer clic en un control de botón.

Formularios de usuario, controles de formulario y controles ActiveX

Si no solo está seleccionando una macro, la forma más común de ejecutar un programa VBA es hacer clic en un botón. Ese botón puede ser un control de forma o un Control ActiveX. Hasta cierto punto, sus elecciones dependen de la aplicación de Office que esté utilizando. Excel ofrece opciones ligeramente diferentes que Word, por ejemplo. Pero estos tipos fundamentales de controles son los mismos..

Debido a que ofrece la mayor flexibilidad, echemos un vistazo a lo que puede hacer con Excel 2010. Se insertará un mensaje de texto simple en una celda cuando se haga clic en varios botones diferentes solo para aclarar las diferencias..

Para comenzar, cree un nuevo libro de Excel y seleccione la pestaña Desarrollador. (Si tiene otra aplicación de Office, una variación de estas instrucciones debería funcionar).

Haz clic en el ícono Insertar. Primero trabajaremos con el botón Controles de formulario.

Los controles de formulario son la tecnología más antigua. En Excel, se introdujeron por primera vez en la versión 5.0 en 1993. A continuación, trabajaremos con los formularios de usuario de VBA, pero los controles de formulario no se pueden usar con ellos. Tampoco son compatibles con la web. Los controles de formulario se colocan directamente en la superficie de la hoja de trabajo. Por otro lado, algunos controles ActiveX, que consideramos a continuación, no se pueden usar directamente en las hojas de trabajo.

Los controles de formulario se utilizan con una técnica de "hacer clic y dibujar". Haga clic en el control de formulario Botón. El puntero del mouse cambiará a un signo más. Dibuje el control arrastrando sobre la superficie. Cuando suelta el botón del mouse, aparece un cuadro de diálogo que solicita un comando macro para conectarse con el botón.

--------
Haga clic aquí para mostrar la ilustración.
--------

Especialmente cuando está creando un control por primera vez, no tendrá una macro de VBA esperando para conectarse con el botón, por lo tanto, haga clic en Nuevo y el Editor de VBA se abrirá con el nombre sugerido ya completado en el shell de un evento subrutina.

--------
Haga clic aquí para mostrar la ilustración.
--------

Para completar esta aplicación muy simple, simplemente escriba esta declaración de código VBA dentro de Sub:

 Cells (2, 2) .Value = "Haga clic en el botón de formulario" 

Un botón ActiveX es casi exactamente lo mismo. Una diferencia es que VBA coloca este código en la hoja de trabajo, no en un módulo separado. Aquí está el código completo del evento..

 Private Sub CommandButton1_Click () Cells (4, 2) .Value = "ActiveX Button Clicked" End Sub 

Además de colocar estos controles directamente en la hoja de trabajo, también puede agregar un Formulario de usuario al proyecto y colocar controles sobre eso en su lugar. UserForms, casi lo mismo que los formularios de Windows, tiene muchas ventajas al poder administrar sus controles más como una aplicación normal de Visual Basic. Agregue un UserForm al proyecto en el editor de Visual Basic. Use el menú Ver o haga clic con el botón derecho en el Explorador de proyectos.

--------
Haga clic aquí para mostrar la ilustración.
--------

El valor predeterminado para un formulario de usuario es no muestra el formulario. Entonces, para que sea visible (y hacer que los controles estén disponibles para el usuario), ejecute el método Show del formulario. Agregué otro botón de formulario solo para esto.

 Sub Button2_Click () UserForm1.Show End Sub 

Notarás que el UserForm es modal por defecto. Eso significa que cuando el formulario está activo, todo lo demás en la aplicación está inactivo. (Hacer clic en los otros botones no hace nada, por ejemplo). Puede cambiar esto cambiando la propiedad ShowModal de UserForm a False. Pero esto nos está metiendo más en la programación. Los siguientes artículos de esta serie explicarán más sobre esto..

El código para el UserForm se coloca en el objeto UserForm. Si selecciona Ver código para todos los objetos en el Explorador de proyectos, verá que hay tres subrutinas de eventos Click separadas que están contenidas en tres objetos diferentes. Pero todos están disponibles para el mismo libro de trabajo..

--------
Haga clic aquí para mostrar la ilustración.
--------

Además de forzar un evento haciendo clic en un botón, VBA también se utiliza para reaccionar a los eventos en los objetos en la aplicación de alojamiento. Por ejemplo, puede detectar cuándo cambia una hoja de cálculo en Excel. O puede detectar cuándo se agrega una fila a una base de datos en Access y escribir un programa para controlar ese evento.

Además de los botones de comando, cuadros de texto y otros componentes familiares que ve en los programas todo el tiempo, puede agregar componentes que en realidad forman parte de su hoja de cálculo de Excel en tu documento de Word O hacer lo contrario. Esto va mucho más allá de "copiar y pegar". Por ejemplo, puede mostrar una hoja de cálculo de Excel en un documento de Word.

VBA le permite usar todo el poder de una aplicación de Office en otra. Por ejemplo, Word tiene una capacidad de cálculo relativamente simple incorporada. Pero Excel, bueno, "sobresale" en el cálculo. ¿Suponga que desea utilizar el registro natural de la función Gamma (un cálculo matemático relativamente sofisticado) en su documento de Word? Con VBA, puede pasar valores a esa función en Excel y recuperar la respuesta en su documento de Word.

¡Y puede usar mucho más que las aplicaciones de Office! Si hace clic en el icono "Más controles", puede ver una lista considerable de cosas que están instaladas en su computadora. No todos estos funcionan "listos para usar" y debe tener la documentación para cada uno de ellos disponible, pero le da una idea sobre qué tan amplio es el soporte para VBA.

De todas las características en VBA, hay una que es claramente más útil que cualquier otra. Descubre qué es en la página siguiente.

¡He guardado lo mejor para el final! Aquí hay una técnica que se aplica en todos los ámbitos a todas las aplicaciones de Office. Te encontrarás usándolo mucho, así que lo estamos cubriendo aquí en la Introducción.

A medida que comienza a codificar programas VBA más sofisticados, uno de los primeros problemas con los que se encontrará es cómo conocer los métodos y las propiedades de los objetos de Office. Si está escribiendo un programa VB.NET, a menudo buscará ejemplos de código y ejemplos para resolver este problema. Pero cuando considera todas las diferentes aplicaciones de alojamiento y el hecho de que cada una de ellas tiene cientos de objetos nuevos, generalmente no puede encontrar algo que coincida exactamente con lo que necesita hacer..

La respuesta es el "Grabar macro ..."

La idea básica es activar "Grabar macro", seguir los pasos de un proceso que es similar a lo que desea que logre su programa y luego verificar el programa VBA resultante para obtener código e ideas.

Muchas personas cometen el error de pensar que tienes que poder grabar exactamente el programa que necesitas. Pero no es necesario ser tan exacto. Por lo general, es lo suficientemente bueno para grabar un programa VBA que está "cerca" de lo que desea y luego agregar las modificaciones de código para que haga el trabajo con precisión. Es tan fácil y útil que a veces grabaré una docena de programas con pequeñas diferencias solo para ver cuáles son las diferencias de código en el resultado. Recuerde eliminar todos los experimentos cuando termine de verlos!

Como ejemplo, hice clic en Grabar macro en el Editor de Visual Basic de Word y escribí varias líneas de texto. Aquí está el resultado. (Se han agregado continuaciones de línea para acortarlas).

 Sub Macro1 () "Macro1 Macro" Selection.TypeText Text: = _ "Estos son los momentos en que" Selection.TypeText Text: = _ "prueba las almas de los hombres. El" Selection.TypeText Text: = _ "summer soldier" Selection.TypeText Texto: = _ "y el sol patriota" Selection.TypeText Text: = _ ", en estos tiempos, se reducirá de" Selection.TypeText Text: = _ "el servicio de su país". Selection.MoveUp Unit: = wdLine, Count: = 1 Selection.HomeKey Unit: = wdLine Selection.MoveRight Unit: = wdCharacter, _ Count: = 5, Extend: = wdExtend Selection.Font.Bold = wdToggle End Sub Sub 

Nadie estudia VBA solo por sí mismo. Siempre lo usa junto con una aplicación de Office específica. Entonces, para continuar aprendiendo, hay artículos aquí que demuestran que VBA se usa con Word y Excel:

-> Comenzando a usar VBA: The Word Working Partner

-> Comenzando a usar VBA: el socio de trabajo de Excel