Introducción a VBA en Excel 2010
Resumen: este artículo presenta, a modo de introducción, Visual Basic para Aplicaciones (VBA) en Excel 2010 y está dirigido a usuarios avanzados de Excel que aún no son programadores. En este tema se incluye información general sobre el lenguaje de VBA, instrucciones para obtener acceso a VBA en Excel 2010, la explicación detallada de una solución para un problema real de programación de VBA en Excel y sugerencias sobre programación y depuración.
Última modificación: viernes, 11 de diciembre de 2009
Hace referencia a: Excel 2010 | Office 2010 | SharePoint Server 2010 | VBA | Visual Basic for Applications (VBA)
En este artículo
¿Por qué usar VBA en Excel 2010?
Programación de VBA 101
Macros y el Editor de Visual Basic
Un ejemplo real
Modificación del código grabado
Más cosas que se pueden hacer con VBA
¿Qué sigue?
Recursos adicionales
Ben Chinowsky, SDK Bridge
Noviembre de 2009
Se aplica a: Microsoft Excel 2010
Contenido
¿Por qué usar VBA en Excel 2010?
Programación de VBA 101
Macros y el Editor de Visual Basic
Un ejemplo real
Modificación del código grabado
Más cosas que se pueden hacer con VBA
¿Qué sigue?
Recursos adicionales
¿Por qué usar VBA en Excel 2010?
Microsoft Excel 2010 es una herramienta muy eficaz que se puede usar para manipular, analizar y presentar datos. A veces, no obstante, a pesar del amplio conjunto de características que ofrece la interfaz de usuario (UI) estándar de Excel, es posible que se desee encontrar una manera más fácil de realizar una tarea repetitiva y común, o de realizar alguna tarea no incluida en la interfaz de usuario. Afortunadamente, las aplicaciones de Office, como Excel, tienen Visual Basic para Aplicaciones (VBA), un lenguaje de programación que brinda la posibilidad de ampliar dichas aplicaciones.
VBA funciona mediante la ejecución de macros , procedimientos paso a paso escritos en Visual Basic. Aprender a programar podría parecer intimidante, pero con algo de paciencia y algunos ejemplos, como los que se incluyen en este artículo, muchos usuarios encuentran que conocer aunque sea una pequeña parte del código de VBA facilita su trabajo y les brinda la posibilidad de ejecutar tareas en Office que antes creían imposibles de realizar. Si se adquieren algunos conocimientos sobre VBA, resultará mucho más sencillo seguir aprendiendo, por lo que aquí las posibilidades son ilimitadas.
Sin duda, la razón más frecuente por la cuál se usa VBA en Excel es para automatizar tareas repetitivas. Por ejemplo, suponga que tiene docenas de libros con docenas de hojas de cálculo y necesita realizar cambios en cada uno de ellos. Los cambios podrían ser tan simples como aplicar formato nuevo a algún rango fijo de celdas, o bien tan complejos como buscar algunas características estadísticas de los datos en cada hoja, elegir el mejor tipo de gráfico para mostrar datos con esas características y, a continuación, crear y dar formato al gráfico en consecuencia.
En ambos casos, es probable que prefiera no realizar estas tareas de forma manual, al menos no más de unas pocas veces. En su lugar, las tareas pueden automatizarse usando VBA para escribir las instrucciones explícitas que Excel debe seguir.
No obstante, VBA no es útil solo para tareas repetitivas. También puede usar VBA para crear nuevas funcionalidades en Excel (por ejemplo, puede desarrollar nuevos algoritmos para analizar datos y, a continuación, usar las funcionalidades de gráficos de Excel para mostrar los resultados) y realizar tareas que integren Excel con otras aplicaciones de Office, como Microsoft Access 2010. De hecho, de todas las aplicaciones de Office, Excel es la más usada como algo similar a una plataforma de desarrollo general. Además de todas las tareas obvias que implican listas y contabilidad, los programadores usan Excel en una amplia variedad de tareas, desde visualización de datos hasta prototipos de software.
A pesar de todas las buenas razones para usar VBA en Excel 2010, es importante recordar que la mejor solución de un problema posiblemente no se relacione con VBA en absoluto. Excel tiene una gran variedad de características sin VBA y es posible que hasta un usuario avanzado no esté familiarizado con todas ellas. Antes de acudir a una solución de VBA, realice una búsqueda exhaustiva en Ayuda y recursos en línea para asegurarse de que no existe una manera más simple.
Programación de VBA 101
Uso de código para hacer que las aplicaciones realicen las tareas
Quizá crea que escribir código es algo misterioso o complicado, pero sus principios básicos usan la lógica diaria y son bastante accesibles. Las aplicaciones de Office 2010 están creadas de tal modo que exponen lo que se denomina objetos. Estos objetos reciben instrucciones. Para interactuar con las aplicaciones, se envían instrucciones a varios objetos de la aplicación. Los objetos, si bien son variados y flexibles, tienen sus límites. Solo pueden hacer aquello para lo que fueron diseñados y solo harán lo que se les indique que hagan.
Objetos
Los objetos de programación se relacionan entre sí sistemáticamente en una jerarquía denominada modelo de objetos de la aplicación. El modelo de objetos básicamente refleja lo que se ve en la interfaz de usuario. Por ejemplo, el modelo de objetos de Excel contiene los objetos Application, Workbook, Sheet y Chart, entre muchos otros. El modelo de objetos constituye el mapa conceptual de la aplicación y sus funcionalidades.
Propiedades y métodos
Es posible manipular objetos al establecer sus Propiedades y llamar a sus métodos. Si se establece una propiedad, se producen algunos cambios en la calidad del objeto. Si se llama a un método, se logra que el objeto realice una determinada acción. Por ejemplo, el objeto Workbook tiene un método Close que cierra el libro y una propiedad ActiveSheet que representa la hoja activa del libro.
Colecciones
Varios objetos vienen en las versiones singular y plural; por ejemplo, libro y libros, hoja de cálculo y hojas de cálculo. Las versiones en plural se denominan colecciones. Los objetos de una colección se usan para realizar una acción en varios elementos de esa colección. Más adelante, en este artículo, se explicará cómo usar la colección Worksheets para cambiar el nombre de cada hoja de cálculo de un libro.
Macros y el Editor de Visual Basic
Ahora que ya conoce en parte cómo Microsoft Excel 2010 expone su modelo de objetos, puede intentar llamar a los métodos de un objeto y establecer las propiedades del objeto. Para hacerlo, debe escribir el código en un lugar y de una manera que Office pueda comprender; generalmente, mediante el uso del Editor de Visual Basic. Aunque se instala de forma predeterminada, muchos usuarios ni siquiera saben que está disponible hasta que no se habilita en la cinta de opciones.
Ficha Programador
Todas las aplicaciones de Office 2010 usan la cinta de opciones. La ficha Programador es una de las fichas incluidas en la cinta de opciones, donde se puede tener acceso al Editor de Visual Basic y a otras herramientas de programador. Debido a que Office 2010 no muestra la ficha Programador de manera predeterminada, debe habilitarla mediante el siguiente procedimiento:
Para habilitar la ficha Programador
En la ficha Archivo, elija Opciones para abrir el cuadro de diálogo Opciones de Excel.
Haga clic en Personalizar cinta de opciones en el lado izquierdo del cuadro de diálogo.
En Comandos disponibles en:, en el lado izquierdo del cuadro de diálogo, seleccione Comandos más utilizados.
En Personalice esta cinta de opciones, en el lado derecho del cuadro de diálogo, seleccione Fichas principales y, a continuación, active la casilla de verificación Programador.
Haga clic en Aceptar.
Después de que Excel muestre la ficha Programador, observe la ubicación de los botones Visual Basic, Macros y Seguridad de macros en la ficha.
Figura 1. Ficha Programador en Excel 2010
Problemas de seguridad
Haga clic en el botón de Seguridad de macros para especificar qué macros pueden ejecutarse y en qué condiciones. Aunque el código de macros de sistemas no confiables puede dañar gravemente el equipo, las condiciones de seguridad que impiden ejecutar macros útiles pueden disminuir en gran medida la productividad. La seguridad de macros es un tema complejo que se debe estudiar y comprender, si se trabaja con macros de Excel.
Para el propósito de este artículo, tenga en cuenta que si la barra Advertencia de seguridad: las macros se han deshabilitado aparece entre la cinta de opciones y el libro, cuando abre un libro que contiene una macro, puede hacer clic en el botón Habilitar contenido para habilitar las macros.
Además, como medida de seguridad, no puede guardar una macro en el formato de archivo predeterminado de Excel (.xlsx); debe guardar la macro en un archivo con extensión especial (.xlsm).
Editor de Visual Basic
El siguiente procedimiento muestra cómo crear un nuevo libro en blanco donde se almacenarán las macros. A continuación, podrá guardar el libro con el formato .xlsm.
Para crear un nuevo libro en blanco
Haga clic en el botón Macros, de la ficha Programador.
En el cuadro de diálogo Macro que aparece, escriba Hello en Nombre de macro.
Haga clic en el botón Crear para abrir el Editor de Visual Basic que incluirá los esquemas de una nueva macro ya escritos.
VBA es un lenguaje de programación completo y, en consecuencia, tiene un entorno de programación completo. En este artículo solo se estudian las herramientas que se usan para empezar a trabajar en programación sin incluir la mayoría de las herramientas del Editor de Visual Basic. Realizada esta salvedad, cierre la ventana Propiedades en el lado izquierdo del Editor de Visual Basic e ignore las dos listas desplegables que aparecen sobre el código.
Figura 2. Editor de Visual Basic
El Editor de Visual Basic contiene el siguiente código.
Sub Hello()
End Sub
Sub se refiere a Subrutinaque, por el momento, se puede definir como "macro". Al ejecutar la macro Hello se ejecuta cualquier código que se encuentre entre Sub Hello() y End Sub.
Ahora, edite la macro para que tenga un aspecto similar al siguiente código.
Sub Hello()
MsgBox ("Hello, world!")
End Sub
Vuelva a la ficha Programador en Excel y haga clic de nuevo en el botón Macros.
Seleccione la macro Hello en la lista que aparece y, a continuación, haga clic en Ejecutar para mostrar un cuadro de mensaje pequeño que contiene el texto "Hello, world!".
Acaba de crear e implementar correctamente código de VBA personalizado en Excel. Haga clic en Aceptar en el cuadro de mensaje para cerrarlo y terminar de ejecutar la macro.
Si no aparece el cuadro de mensaje, compruebe la configuración de seguridad de la macro y reinicie Excel.
Accesibilidad de las macros
También puede tener acceso al cuadro de diálogo Macros desde la ficha Ver, pero si usa una macro con frecuencia, le resultará más cómodo tener acceso a ella mediante un método abreviado de teclado o un botón de la Barra de herramientas de acceso rápido.
Para crear un botón para la macro Hello en la Barra de herramientas de acceso rápido, use el siguiente procedimiento.
El siguiente procedimiento describe cómo crear un botón para una macro en la Barra de herramientas de acceso rápido:
Para crear un botón para una macro en la Barra de herramientas de acceso rápido
Haga clic en la pestaña Archivo.
Haga clic en Opciones para abrir el cuadro de diálogo Opciones de Excel y, a continuación, haga clic en Barra de herramientas de acceso rápido.
En la lista que se encuentra en Comandos disponibles en:, elija Macros. Busque en la lista el texto que es similar a Book1!Hello y selecciónelo.
Haga clic en el botón Agregar >> para agregar la macro a la lista en el lado derecho y, a continuación, haga clic en el botón Modificar…, a fin de seleccionar una imagen del botón para asociar a la macro.
Haga clic en Aceptar. El nuevo botón deberá mostrarse en la Barra de herramientas de acceso rápido, encima de la ficha Archivo.
Ahora puede ejecutar rápidamente la macro en cualquier momento sin tener que usar la ficha Programador: inténtelo.
Un ejemplo real
Supongamos que tiene un libro que contiene listas en una gran cantidad de hojas de cálculo y que desea cambiar el nombre de cada hoja de cálculo para que coincida con el encabezado de la lista de esa hoja de cálculo. No todas las hojas de cálculo contienen una lista. Si una hoja de cálculo tiene una lista, el encabezado está en la celda B1, de lo contrario, si no tiene una lista, la celda B1 está en blanco. Los nombres de hojas de cálculo sin listas no deben modificarse.
Normalmente, esto podría tratarse de una tarea compleja que implica ver cada hoja de cálculo para saber si tiene una lista, copiar el nombre de la lista en caso de que exista, hacer clic en la ficha de hoja de cálculo y luego pegar el nuevo nombre. En lugar de realizar todos estos pasos manualmente, use VBA de Excel para cambiar el nombre de las hojas de forma automática.
Aprendizaje sobre objetos
Para resolver un problema de programación de VBA, primero debe saber qué objetos manipulará el código. Para investigar y conocer esa información, una herramienta esencial es la referencia del modelo de objetos de Excel, que forma parte de la referencia del programador de Excel 2007 en Microsoft Developer Network (MSDN).
Estos materiales de referencia se actualizarán para Excel 2010 cuando la herramienta esté disponible al público; sin embargo, la referencia del programador de Excel 2007 se adecua a la mayoría de los casos de Excel 2010.
Figura 3. Referencia del modelo de objetos de Excel en MSDN
El primer paso consiste en averiguar cómo manipular los objetos concretos con los que necesita trabajar para llevar a cabo su tarea; por ejemplo, hojas de cálculo, nombres de hoja de cálculo, celdas y contenidos de celdas. En Excel, hay al menos dos formas de enfocar el problema:
Ir directamente a la referencia del modelo de objetos.
Grabar algunas de las acciones que se desean automatizar, ver cómo el código grabado manipula los objetos y, a continuación, ir a la referencia del modelo de objetos para obtener más información.
Las opiniones varían con respecto a qué enfoque es preferible, pero por ahora, intente primero usar la grabadora de macros.
Uso de la grabadora de macros
A veces una simple macro grabada es todo lo que se necesita; en estos casos, incluso, no es necesario mirar el código. Por lo general, la grabación por sí sola no es suficiente, pero sí, un punto de inicio en el siguiente proceso.
Para usar la grabadora de macros como punto de inicio de la solución
Grabe las acciones que desea codificar.
Revise el código y busque las líneas que realizan esas acciones.
Elimine el resto del código.
Modifique el código grabado.
Agregue variables, estructuras de control y otro código que la grabadora de macros no pueda grabar.
Comience su investigación con la grabación de una macro que cambie el nombre de una hoja de cálculo a New Name. Después podrá usar la macro grabada para crear su propia macro que cambie el nombre de varias hojas de cálculo según su contenido.
Para grabar una macro que cambie el nombre de una hoja de cálculo
Haga clic en Grabar macro en la ficha Programador.
Coloque el nombre RenameWorksheets a la macro, cambie el nombre Sheet1 a New Name y, a continuación, haga clic en Detener grabación.
Vaya a la ficha Programador o Ver, haga clic en el botón Macros y elija Editar para abrir el Editor de Visual Basic.
En el Editor de Visual Basic, el código debe verse similar al siguiente.
Sub RenameWorksheets()
'
' RenameWorksheets Macro
'
'
Sheets("Sheet1").Select
Sheets("Sheet1").Name = "New Name"
End Sub
Las primeras cuatro líneas que aparecen después de la línea Sub son comentarios. Toda línea que comienza con un apóstrofe es un comentario y no tiene efecto alguno sobre la acción que ejecuta la macro. Los principales usos de los comentarios son los siguientes:
Facilitar la comprensión del código, no solo para usted, sino para cualquier persona que necesite modificarlo en el futuro.
Deshabilitar temporalmente una línea de código (se denomina marcar como comentario).
Los cuatro comentarios en esta macro grabada no cumplen ningún propósito, por lo tanto, elimínelos.
La siguiente línea usa el método Select para seleccionar el miembro Sheet1 del objeto de la colección Sheets. En el código de VBA, por lo general, no es necesario seleccionar objetos antes de manipularlos, aunque eso es lo que hace la grabadora de macros. En otras palabras, esta línea de código es redundante, por lo tanto, puede eliminarla.
La última línea de la macro grabada modifica la propiedad Nombre del miembro Sheet1 de la colección Sheets. Esta es la línea que debe conservar.
Después de realizar los cambios, el código grabado ahora debe ser similar al siguiente.
Sub RenameWorksheets()
Sheets("Sheet1").Name = "New Name"
End Sub
Vuelva a cambiar la hoja denominada New Name a Sheet1 de forma manual y, a continuación, ejecute la macro. El nombre debe volver a cambiar a New Name.
Modificación del código grabado
Ahora ha llegado el momento de investigar la colección Sheets que la grabadora de macros usó. El tema Sheets en la referencia del modelo de objetos incluye el siguiente texto.
"La colección Sheets puede contener los objetos Chart o Worksheet. Si necesita trabajar con hojas de un solo tipo, consulte el tema de objetos para ese tipo de hoja".
Como está trabajando solo con Worksheets, entonces, cambie el código para que se vea de la siguiente forma.
Sub RenameWorksheets()
Worksheets("Sheet1").Name = "New Name"
End Sub
Función de bucle
Una limitación del código en este punto es que solo realiza el cambio en una hoja de cálculo. Se puede agregar otra línea para cada hoja de cálculo cuyo nombre desea cambiar, pero ¿qué sucede si desconoce cuántas hojas de cálculo hay o cuáles son sus nombres actuales? Se necesita una forma de aplicar alguna regla para cada hoja de cálculo del libro.
VBA tiene una construcción denominada bucle For Each que es ideal. El bucle For Each examina cada elemento en un objeto de colección, como Worksheets, y se puede usar para llevar a cabo una acción (como cambiar un nombre) en algunos o en todos esos elementos.
Para obtener más información acerca del bucle For Each, consulte la referencia del lenguaje de VBA. Haga clic en la sección sobre los temas conceptuales de Visual Basic y, a continuación, en el tema sobre el uso de instrucciones For Each...Next. Además, tenga en cuenta que la referencia del lenguaje de VBA, como la referencia del modelo de objetos, compensará ampliamente el tiempo que invierta examinándola, ya que es un lugar excelente para buscar ideas si se estanca cuando trabaja con código.
Use el tercer ejemplo del tema sobre el uso de instrucciones For Each...Next para modificar la macro con el fin de que tenga un aspecto similar al siguiente código.
Sub RenameWorksheets()
For Each myWorksheet In Worksheets
myWorksheet.Name = "New Name"
Next
End Sub
myWorksheet es una variable, es decir, lo que representa varía. En este caso, la variable myWorksheet representa sucesivamente cada hoja de cálculo en la colección Worksheets. No es necesario usar myWorksheet; se puede usar "x", "ws", "HojaCalculoCambiarNombreAlContenidoCeldaB1" o (con algunas restricciones) prácticamente cualquier nombre que se desee. Una buena regla es usar nombres de variables que sean lo suficientemente extensos como para que recuerden a qué se refieren, pero no tan extensos que puedan recargar el código.
Si ejecuta la macro en su estado actual, se produce un error porque Excel requiere que cada hoja de cálculo de un libro tenga un nombre único. Sin embargo, la línea siguiente indica a Excel que asigne a todas las hojas de cálculo el mismo nombre.
myWorksheet.Name = "New Name"
Para corregir la línea y comprobar si el bucle For Each funciona, cambie la línea de la siguiente manera.
myWorksheet.Name = myWorksheet.Name & "-changed"
En lugar de intentar dar el mismo nombre a cada hoja de cálculo, esta línea cambia el nombre actual de cada hoja de cálculo (myWorksheet.Name) anexando la palabra "-changed" al nombre actual.
Cambio de nombre útil
La macro se está acercando a lo que podría ser la solución para el problema que tiene en este momento. Lo que necesita ahora es tomar información de las hojas de cálculo, específicamente de la celda B1 de cada hoja, y colocar esa información en los nombres de las hojas de cálculo.
Esta vez, en vez de usar la grabadora de macros para averiguar cómo referirse a una celda, pruebe y vea si usando el objeto Cell logra su objetivo. Es un buen intento, pero si abre la referencia del modelo de objetos y busca el objeto Cell, notará que no existe ningún objeto Cell. En cambio, hay un objeto CellFormat.
El tema del objeto CellFormat incluye el siguiente código en el primer ejemplo de código.
' Set the interior of cell A1 to yellow.
Range("A1").Select
Resulta ser que usa Range para especificar un rango de celdas o simplemente una celda individual. Nuevamente, no es necesaria la parte .Select, pero sí es necesario averiguar cómo hacer referencia a los contenidos del objeto Range, en oposición al mismo objeto Range. Si se dirige al tema del objeto Range, puede leer que Range tiene Methods y Properties. Los contenidos de Range constituyen una cosa, no una acción, por lo que probablemente sea una Property. Si busca hacia abajo en la lista, podrá ver la propiedad Value. Por lo tanto, intente lo siguiente.
Sub RenameWorksheets()
For Each myWorksheet In Worksheets
myWorksheet.Name = myWorksheet.Range("B1").Value
Next
End Sub
Obtendrá un error si ejecuta esto en un libro que contiene hojas de cálculo donde la celda B1 está vacía, porque Range vacío tiene un valor de "" (una cadena de texto vacía), que no es un nombre de hoja de cálculo válido. De todas formas, ya es momento de crear algunos datos de ejemplo. Haga que las tres hojas de cálculo del libro tengan un aspecto similar al de la siguiente figura y, a continuación, ejecute la macro.
Figura 4. Datos de ejemplo para la macro RenameWorksheets
Los nombres de las hojas de cálculo deben cambiar en consecuencia.
Búsqueda de celdas vacías
Como mencionamos anteriormente, la macro genera un error si alguna de las celdas B1 en el libro está vacía. En lugar de revisar manualmente todas las hojas de cálculo, puede codificar la macro para que haga esto por usted. Antes de la línea myWorksheet.Name, agregue la siguiente línea de código.
If myWorksheet.Range("B1").Value <> "" Then
Después de la línea myWorksheet.Name agregue el texto siguiente.
End If
Esto se denomina una instrucción If…Then. La instrucción If…Then indica a Excel que haga lo que se indica entre la línea If y la línea End, pero solo si se cumple la condición en la línea If. En el ejemplo, la siguiente línea especifica la condición que se debe cumplir.
myWorksheet.Range("B1").Value <> ""
La línea <> significa "no es igual a" y las comillas sin contenido en su interior representan una cadena de texto vacía, es decir, no hay texto en absoluto. Por lo tanto, cualquier línea de código que esté entre If y End se ejecutará únicamente si el valor de la celda B1 no es igual a nada, es decir, si hay texto en la celda B1.
Para obtener más información acerca de la instrucción If…Then, consulte la referencia del lenguaje de VBA. (El nombre completo de la instrucción es "If…Then…Else", donde Else es un componente opcional).
Declaraciones de variables
Otra mejora que debe hacer en la macro es poner una declaración de la variable myWorksheet al principio de la macro.
Dim myWorksheet As Worksheet
Dim es la abreviatura de "Dimension" y Worksheet es el tipo de esta variable en particular. Esta instrucción indica a VBA qué tipo de entidad myWorksheet representa. Observe que después de escribir As, el Editor de Visual Basic muestra una ventana emergente que incluye todos los tipos de variables disponibles. Eso es un ejemplo de la tecnología IntelliSense; es decir, que el Editor de Visual Basic responde a lo que determina que se está intentando hacer y ofrece una lista de opciones apropiadas. Puede elegir una opción de la lista o seguir escribiendo.
Aunque las declaraciones de variables no son necesarias en VBA, su uso es muy recomendable. Estas declaraciones hacen que el seguimiento de variables y errores en el código sean más fáciles de realizar. Asimismo, tenga en cuenta que si declara una variable con un tipo de objeto (como Worksheet), IntelliSense mostrará una lista adecuada de propiedades y métodos asociados con ese objeto si usa esa variable de objeto más adelante en la macro.
Comentarios
La macro es lo suficientemente compleja ahora y se necesitarían incluir algunos comentarios que recuerden lo que hace el código. La cantidad de comentarios que se va a usar en parte se debe a una cuestión de estilo personal, pero, en general, es mejor que sean más que menos. El código generalmente necesita modificaciones y actualizaciones con el tiempo. Sin comentarios, podría ser difícil comprender lo que sucede en el código, especialmente si la persona que lo modifica no es la misma persona que lo escribe en primer lugar. Al agregar comentarios para la condición If y para la línea que cambia el nombre de las hojas de cálculo, se obtiene el siguiente código.
Sub RenameWorksheets()
Dim myWorksheet As Worksheet
For Each myWorksheet In Worksheets
'make sure that cell B1 is not empty
If myWorksheet.Range("B1").Value <> "" Then
'rename the worksheet to the contents of cell B1
myWorksheet.Name = myWorksheet.Range("B1").Value
End If
Next
End Sub
Para probar la macro, vuelva a cambiar el nombre de las hojas de cálculo a Sheet1, Sheet2 y Sheet3, y elimine los contenidos de la celda B1 en una o más hojas de cálculo. Ejecute la macro para comprobar si cambia los nombres de las hojas de cálculo que tienen texto en la celda B1 y si deja las otras hojas sin modificaciones. La macro funciona para cualquier cantidad de hojas de cálculo, con cualquier combinación de celdas B1 llenas y vacías.
Más cosas que se pueden hacer con VBA
Esta sección estudia algunas otras cosas que se pueden hacer con VBA en Excel 2010. Los ejemplos de esta sección están diseñados para proporcionar una idea de las funciones de VBA en lugar de centrarse en escenarios reales específicos. A medida que trabaja con los ejemplos, quizá le resulte útil repasar información sobre los objetos en cada paso. Puede encontrar esta información en la referencia del modelo de objetos.
Importancia de una actitud abierta
Una buena forma de aprender programación en general, y VBA de Excel en particular, es adoptar una estrategia que implique intentar algo, ver si funciona y preguntarse cosas como:
¿Qué podría intentar hacer a continuación?
¿Qué deseo aprender en primer lugar según el uso que necesito darle a VBA?
¿Qué puede ser simplemente divertido o interesante saber?
¿Qué despierta mi curiosidad?
Se recomienda encarecidamente al lector que investigue todos los caminos que se abren hacia la ruta del conocimiento.
Gráficos
Una tarea común en Excel es crear un gráfico basado en un rango de celdas. Cree una nueva macro llamada AssortedTasks y, a continuación, escriba el siguiente texto en el Editor de Visual Basic.
Dim myChart As ChartObject
Agregue una línea para crear el objeto de gráfico y asígnele la variable myChart.
Set myChart = ActiveSheet.ChartObjects.Add(100, 50, 200, 200)
Los números en los paréntesis determinan la posición y el tamaño del gráfico. Los primeros dos números son las coordenadas de la esquina superior izquierda y los segundos dos números corresponden al ancho y alto.
Cree una nueva hoja de cálculo en blanco y ejecute la macro. El gráfico que se crea no sirve porque no tiene datos. Elimine el gráfico que acaba de crear y agregue las siguientes líneas al final de la macro.
With myChart
.Chart.SetSourceData Source:=Selection
End With
Este es un patrón común en la programación de VBA. Primero crea un objeto, le asigna una variable y, a continuación usa la construcción With…End With para realizar tareas con el objeto. El código de ejemplo le indica al gráfico que use la selección actual para sus datos. (Selection es un valor para el parámetro Source del método SetSourceData, no un valor de una propiedad del objeto; por lo tanto, la sintaxis de VBA requiere que use dos puntos y el signo igual [:=] en lugar de usar solo el signo igual [=] para asignar el valor.)
Escriba algunos números en las celdas A1:A5, seleccione las celdas y, a continuación, ejecute la macro. El gráfico se muestra como el tipo predeterminado, un gráfico de barras.
Figura 5. Gráfico de barras creado mediante VBA
Si no le gusta el gráfico de barras, puede cambiar a algún otro tipo de gráfico usando código similar al siguiente.
With myChart
.Chart.SetSourceData Source:=Selection
.Chart.ChartType = xlPie
End With
xlPie es un ejemplo de una constante integrada, también conocida como constante enumerada. Toda la aplicación Excel tiene varias de estas constantes que se encuentran muy bien documentadas. Para obtener más información acerca de las constantes integradas, consulte la sección sobre enumeraciones de la referencia del modelo de objetos. Por ejemplo, las constantes para tipos de gráfico se indican en la sección sobre enumeraciones XlChartType.
Los datos se pueden modificar. Por ejemplo, intente agregar esta línea justo después de la declaración de variable.
Application.ActiveSheet.Range("a4").Value = 8
Puede obtener una entrada de usuario y usar esa entrada para modificar los datos.
myInput = InputBox("Please type a number:")
Application.ActiveSheet.Range("a5").Value = myInput
Por último, agregue las líneas siguientes al final de la macro.
ActiveWorkbook.Save
ActiveWorkbook.Close
La macro completa debería ser similar a la siguiente.
Sub AssortedTasks()
Dim myChart As ChartObject
Application.ActiveSheet.Range("a4").Value = 8
myInput = InputBox("Please type a number:")
Application.ActiveSheet.Range("a5").Value = myInput
Set myChart = ActiveSheet.ChartObjects.Add(100, 50, 200, 200)
With myChart
.Chart.SetSourceData Source:=Selection
.Chart.ChartType = xlPie
End With
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
Compruebe que las celdas A1:A5 sigan estando seleccionadas, ejecute la macro, escriba un número en el cuadro de entrada y, a continuación, haga clic en Aceptar. El código guarda y cierra el libro. Vuelva a abrir el libro y observe el cambio en el gráfico circular.
UserForms
La sección anterior mostraba cómo usar un cuadro de entrada sencillo para obtener una entrada de usuario. Además del correspondiente cuadro de mensaje que muestra información, VBA proporciona amplias funcionalidades que puede usar para crear cuadros de diálogo personalizados, para codificar controles que se colocan directamente en las hojas de cálculo o para manipular los cuadros de diálogo que están integrados en Excel. Para obtener más información acerca de estas funcionalidades, consulte controles, cuadros de diálogo y formularios en la referencia del programador de Excel 2007.
Esta sección completa la introducción a VBA en Excel presentando un panorama general de UserForms.
En la ficha Programador, haga clic en el botón Visual Basic para abrir el Editor de Visual Basic y, a continuación, vaya al menú Insertar y elija UserForm para abrir la vista Diseño de UserForm.
Verá dos ventanas. Una representa el UserForm que está creando y la otra, el Cuadro de herramientas, muestra los distintos controles que puede agregar a su UserForm; por ejemplo, botones de comandos, botones de opciones, casillas de verificación, entre otros. Puede mover el mouse sobre un control del Cuadro de herramientas para ver qué tipo de control crea.
Cree un UserForm muy sencillo con un solo botón que ejecute la macro Hello que creamos al comienzo de este artículo. En el Cuadro de herramientas, presione el control CommandButton y, a continuación, arrástrelo al UserForm para crear un botón de comando. Haga clic con el botón secundario en el botón de comando y elija Ver código.
La Sub que aparece es un esqueleto para un procedimiento de evento que se ejecuta cuando se produce un evento en particular. En este caso, como el nombre de Sub indica, el evento que ejecuta el código es un Click en CommandButton1. Agregue la siguiente línea al procedimiento de evento.
Run("Hello")
El Editor de Visual Basic debe ser ahora similar al siguiente.
Figura 6. Procedimiento de evento CommandButton1_Click
Guarde el libro, vaya al menú Ventana y elija UserForm1 (UserForm) para volver a mostrar el UserForm. Haga clic en la flecha verde de la barra de herramientas para ejecutar el UserForm. Cuando aparece el cuadro de diálogo, haga clic en el botón de comando para ejecutar la macro Hello, que muestra el cuadro de mensaje "Hello, world!". Cierre el cuadro de mensaje para volver al UserForm que se ejecuta y, a continuación, cierre el UserForm que se ejecuta para volver a la Vista Diseño.
¿Qué sigue?
Es posible que la información que se brinda en este artículo, combinada con un poco de experimentación y tiempo de estudio de la referencia del modelo de objetos y la referencia del lenguaje de VBA, le resulte lo suficientemente útil como para lograr cualquier tarea que lo impulsa a empezar a aprender sobre VBA. Si es así, excelente. De lo contrario, un buen paso es ampliar sus expectativas hacia un conocimiento más general de VBA.
Una manera de aprender más sobre VBA es estudiar código activo. Además de los ejemplos proporcionados en la referencia del modelo de objetos y la referencia del lenguaje de VBA, hay una cantidad enorme de código de VBA en Excel disponible en distintas fuentes en línea, incluidos los artículos en MSDN, sitios web desarrollados por los profesionales más valiosos de Microsoft (MVP) que se especializan en Excel y otros sitios web que puede encontrar mediante una búsqueda rápida en Web.
El código de estos recursos puede ayudarlo a resolver problemas inmediatos de programación y proporcionarle ideas para proyectos que ni siquiera ha pensado aún.
Si prefiere realizar un estudio más sistemático de VBA, pueden encontrar varios libros sobre VBA, así como varias revisiones de cada uno de estos libros disponibles en Web que pueden ser útiles para elegir su mejor forma de aprendizaje.