Cómo asignar una Macro de Excel a un botón.

Consejos Rápidos
Si ya estás escribiendo tus primeras macros, puede que te preguntes cómo ejecutarla cuando se haga clic en un botón específico. En esta entrada te cuento Cómo asignar una Macro de Excel a un botón.

Seguramente no tuviste ningún problema cuando trabajamos grabando nuestra primer macro en Excel, ¿verdad?

Luego, cuando pasaste a escribir tu primera Macro VBA, ya la cosa se puso más interesante y las posibilidades de todo esto comenzaron a pasar frente a tus ojos.

Pero ¿qué hay si quieres que la macro se ejecute cuando el usuario haga clic sobre un botón?

Vamos a verlo rápidamente.

Asignar una macro a un botón.

  1. Ve a la ficha “Programador”.
  2. Haz clic sobre el botón “Insertar”.
  3. Selecciona el control de Formulario “Botón”.
  4. Haz clic en tu hoja de trabajo, en el lugar que quieras colocar el botón y en el cuadro que aparece, selecciona el nombre de la macro que quieres que se ejecute al hacer clic sobre él.
  5. Clic sobre el botón “Aceptar”.

Como asignar una Macro de Excel, a un botón

Como asignar una Macro de Excel, a un botón

Cómo asignar una Macro de Excel a un botón

Ahora tu botón estará listo para trabajar. Solo falta que le cambies el texto por el que tú quieras y estarás listo para el próximo.

¡Nos vemos!

Raymundo

¿Cómo Sumar Celdas Visibles en Excel, usando Macros?

Sumar Celdas Visibles

Imagen cortesía de SXC

Si usar las función subtotales no es suficiente para ti, en esta entrada te muestro cómo utilizar una función hecha a medida para que puedas sumar celdas visibles (únicamente), aún si la cosa está más complicada.

En una entrada anterior, te comentaba acerca de la forma de sumar únicamente las celdas visibles en tu hoja de Excel.

Sin embargo, existen situaciones como la que me expresa Miguel en su comentario, en las que el uso de la función SUBTOTALES, no es suficiente para cumplir con la misión.

Hoy te traigo una alternativa, usando macros, para que puedas obtener esos datos que necesitas, dejando por fuera todo lo que esté oculto.

¿Por qué sumar celdas visibles solamente?

Y bueno, eso me lo puedes decir tú, que eres quien lo necesita. Pero si estás leyendo esto por mera curiosidad, te cuento que a veces uno tiene listados en los cuales toda la información está bien organizada, pero en algún momento quieres filtrarlos (ya sea por fecha o por categoría) y estos registros que no cumplen con el criterio de tu filtro, simplemente se esconden.

Ahora bien, ¿por qué seguir sumando todas las celdas si solo se están mostrando unas cuántas?

Tengo que hacer un montón de cobros; pero quiero filtrar todos los que corresponden al último semestre. Filtro los datos y ¡voilá! Se muestran únicamente las sumatorias de esos registros que acabo de filtrar.

¿Cómo lo consigo?

Exacto. Usando una función. Ya sea propia de Excel, o una que hayas creado tú.

¿Puedo hacerlo sin macros?

¡Por supuesto que sí!

De hecho, ya había escrito algo acerca de cómo sumar las celdas visibles, usando una función de Excel, en esta entrada.

¿Por qué hacerlo con macros?

Como te comenté al inicio de esta entrada, existen situaciones en las cuales la función SUBTOTALES, no se adapta exactamente a nuestros requerimientos. Esto puede deberse a que queremos sumar entre columnas, como el caso  de Miguel.

Incluso pueden haber otras variables en juego, que no nos permitan usar SUBTOTALES. En estos casos, hay que echar mano de las macros.

Quiero el código.

Option Explicit

Public Function sumarCeldasVisibles(rngRango As Object)

    Dim total As Long
    Dim celda

    Application.Volatile

    For Each celda In rngRango
        If celda.Rows.Hidden = False Then
            If celda.Columns.Hidden = False Then
                total = total + celda.Value
            End If
    End If

    Next

    sumarCeldasVisibles = total

End Function

Utiliza un Módulo.

Este código no debes de pegarlo en cualquier lugar. Debes usar un módulo para que la función sea accesible desde tu hoja (y por orden, vamos, que ya te he insistido en eso).

¿No recuerdas cómo se inserta un módulo?

Ok, aquí te dejo una vez más el procedimiento para insertar un módulo VBA, no lo pierdas. Vas a necesitarlo en los próximos ejemplos.

Nota

Si no utilizas un módulo, es más seguro que no funcione el ejemplo y te marque un error si tratas de llamar a la función desde una celda de tu hoja de trabajo.

La función trabajando:

Sumar Celdas Visibles

Un consejo adicional como bono.

¿Te gustó la idea de tener una función como ésta?

¿Qué te parece la idea de tener esta y otras funciones disponibles siempre?

¡Exacto! Ya no tendrías que escribirla una y otra vez, en cada libro, para poder usarla.

Para poder lograr esta maravilla, solo debes de guardar tus macros en el libro Personal de macros. Así, siempre estarán disponibles.

La pelota está en tu cancha.

Como siempre, te dejo a ti la responsabilidad de hacer uso del conocimiento compartido y que lo adaptes a tus necesidades puntuales. Siempre habrán detalles que no sean 100% compatibles con tu realidad; pero con tu propio conocimiento puedes hacer los ajustes necesarios.

Ahora, ayúdame tú a compartir esta entrada en Twitter. Será de mucha ayuda para la difusión del blog.

Haz clic y comparte en Twitter

Usar macros no es tan difícil como me dijeron. Mira esto: http://raymundo.me/2r

¡Eh! ¡Gracias por compartir con los demás!

¡Nos vemos!

Cómo escribir en una celda, usando Macros (VBA)

Escribir en una celda usando VBA
En esta entrada te muestro un ejemplo sencillo de cómo lograr escribir en una celda, a través de las macros, para que comiences a dominar a la fiera.

A estas alturas ya no estás para cursos básicos y quieres ir a por todas. Te interesa entrar en el mundo de las macros y quieres un ejemplo sencillo y concreto, para comenzar con pie derecho

¡Muy bien! Vas por buen camino.

Lo que te mostraré hoy será un ejemplo muy básico y sencillo, que te permitirá comprender cómo usar VBA para escribir en una celda (es decir, escribir algo sin utilizar el teclado).

¿Y eso? ¿Para qué me sirve escribir en una celda con VBA?

¡Hey! Si estás leyendo esto, imagino que vienes con algo concreto en mente, o de lo contrario estás navegando sin rumbo.

La mejor forma de aprender a usar Excel, es usándolo con un objetivo específico.

Pero, ¡vamos! Si aprendes a utilizar las macros para escribir en las celdas de Excel, habrás dado tu primer paso en la construcción de tu propia aplicación a medida, la que te servirá como un asistente digital en tus labores cotidianas.

  • Puedes, por ejemplo, armar una factura y que guarde todos los datos de los clientes y sus compras en una base de datos.
  • También puedes crear tu sistema de tickets  con su respectivo seguimiento.
  • Incluso puedes crear un sistema generador de reportes que construya la información automáticamente desde los datos almacenados en tu BD.

¡Eh! Tranquil@

Vamos paso a paso, que así se llega lejos.

¿Has notado que a veces me extiendo un poco más en cosas sencillas?

Esto es porque quiero que prestes más atención y corras menos.

 Cómo escribir en una celda con VBA, en palabras planas

Primero y, como siempre, vas ingresar al editor de VBA y crearás un módulo (solo para no perder la costumbre)

Para escribir en la celda que esté seleccionada en ese momento (no importa cuál), este código será suficiente:

Option Explicit

Public Sub escribirConVBA()
    ActiveCell.Value = "¡Estoy aprendiendo VBA!"
End Sub

Explicación.

Nota que he creado la función escribirConVBA() dentro de la cual está el código que escribe en la celda activa.

La primera parte: ActiveCell, hace referencia a la celda activa o lo que es lo mismo, la celda que está seleccionada en el momento en el que se ejecuta la macro.

La parte que viene después del punto, es decir Value hace referencia al valor de la celda o el contenido en su interior.

Ésto quiere decir que ActiveCell.Value = , significa algo así como:

El valor de la celda activa será igual a…

Y la segunda parte, la que está entre comillas, será el valor que se ‘escribirá’ en la celda activa. Puede ser lo que tú quieras, desde un texto como en este ejemplo, un número, una fecha o el valor de otra celda. Incluso el resultado de un cálculo.

¿Vas viendo por dónde van los tiros?

¡Sí! Podrías hacer muchas cosas partiendo de ésto.

Copiar el valor de otra celda.

Vamos a hacer un pequeño cambio. Tratemos ahora de copiar el contenido de la celda A1, en la celda activa. Ésto se logra con el siguiente cambio en el código.

Option Explicit
Public Sub escribirConVBA()
    ActiveCell.Value = Range("A3").Value
End Sub

Verás que ahora no uso el texto entre comillas, sino que en su lugar uso una referencia a la celda A3.

Una vez más el atributo ‘Value’ aparece, para indicarnos que el nuevo valor de la celda activa, será el valor que tenga la celda A3.

Si quisieras copiar el valor de otra celda, cualquiera que esta sea, solo tendrías que cambiar la referencia A3 por la que tú necesitas. Verás que después de ejecutar el código, tendrás una copia del valor de dicha celda, en la celda activa.

Escribir el resultado de un cálculo.

Hagamos una combinación del ejemplo anterior con un cálculo incluido. Ésto es muy común en aplicaciones como las que se usan para crear facturas.

Imagina que en la celda A3 tienes el precio de un artículo y quieres calcular el IVA.

Una vez calculado el IVA, quieres escribir el resultado en la celda activa. Por supuesto, ésto no lo quieres hacer con fórmulas sino con macros.

El ejemplo, para un IVA de 12%, quedaría más o menos así:

Option Explicit

Public Sub escribirConVBA()
    ActiveCell.Value = Range("A3").Value * 0.12
End Sub

¡Ajá! Ya se va poniendo interesante.

Con lo que has visto hasta ahora, ya tienes para ir haciendo tus pruebas y concretando ideas que tenías guardadas por ahí.

Pero, vamos viendo un último ejemplo, ¿qué dices?

Escribir en una celda específica.

Supongamos que no quieres escribir en cualquier celda que esté activa, sino que quieres elegir (mediante el código) en qué celda específica quieres escribir.

¿Se puede?

Si.

Veamos:

Option Explicit

Public Sub escribirConVBA()
    Range("D6").Value = Range("A3").Value * 0.12
End Sub

En este último ejemplo, hemos seleccionado la celda D6, en la cual escribimos el resultado de calcular el IVA del precio escrito en la celda A3.

Si quieres escribir en otra celda, bastará con que cambias la referencia D6 por la que tú necesites.

Concluyendo.

Aprender macros es ahora tu meta. ¡Felicitaciones por ello!

Pero recuerda ir con calma y atendiendo a cada detalle. Deja de estar revisando cientos y cientos de artículos y ponte a practicar. No desesperes por ver ejemplos muy básicos, ya vendrá el tiempo en que sufrirás con los difíciles 😀

Es muy importante que te familiarices con los conceptos básicos y con estos temas que son los pilares sobre los cuales construirás tus propias aplicaciones o soluciones, porque el objetivo final, es resolver un problema (o satisfacer un requerimiento si la palabra problema te causa un conflicto filosófico 😀 )

Mi consejo, es el de siempre: Practica, practica y practica. Pon tus conocimientos al servicio de alguien más, así ayudarás a otros, tendrás ocasión de practicar y aprenderás mucho y más rápido.

¡Nos vemos!

Raymundo

Crear un índice de tus hojas en un libro Excel

Crear un índice de hojas
Crear un índice de las hojas que tiene tu libro de trabajo, te resultará muy útil para aquellos casos en los que tienes un montón de pestañas y te pierdes en la marea.

Pero, ¿qué hacer para automatizar un poco este proceso? En esta entrada te lo muestro.

La semana pasada recibí una consulta sobre un tema relacionado con un libro de trabajo que tenía un montón de hojas y, luego de responder a la consulta, me di cuenta de que no tenía nada publicado con respecto a crear un índice de hojas para un libro de trabajo como éstos.

Así que he decidido dejarte este artículo como referencia, para que puedas automatizar esta tarea cuando se te presente dicho problema.

¿Qué quieres decir con índice?

Cuando trabajamos con muchos datos o reportes semanales o distintos tipos de informes, fácilmente logramos armar unos archivos “monstruos” con chorrocientas hojas de trabajo que, a medida que va creciendo, nos dificulta más localizar la hoja que buscamos.

Un índice de hojas, o lo que es lo mismo, un listado con los nombres de todas tus hojas y que además, al hacer clic sobre éstos, automáticamente te lleven a la hoja indicada, sería de mucha ayuda.

¿O no lo crees así?

¡Claro que sí!

Podrías hacerlo manualmente, claro; pero ¿quién querría -o quién tendría tiempo para hacerlo- darse a la tarea de crear, uno por uno, los enlaces a 70 hojas de trabajo?

¿Tú sí?

¡Pues buena suerte!

Pero si cambias de opinión, aquí te dejo una cápsula de información que te ayudará a librarte de ese dolor de cabeza en unos pocos minutos.

Crear un índice de hojas en tres pasos.

  • 1

    Primero, debes insertar un módulo de Excel, tal como te mostré en este artículo.

  • 2

    Luego, pegarás el siguiente código en el módulo que acabas de crear.

Option Explicit

Sub construirIndice()

'/***************************************
'   PRIMER PASO: Verificamos que exista
'                la hoja 'Indice', de lo
'                contrario, la creamos.
'***************************************/
Dim hoja As Worksheet
On Error Resume Next
Set hoja = Worksheets("INDICE")
On Error GoTo 0

If hoja Is Nothing Then
    ' Como la hoja no existe, le digo a Excel que la cree.
    Worksheets.Add(Before:=Worksheets(1)).Name = "INDICE"
Else
    ' Si la hoja ya existe, entonces borramos todo
    ' lo que haya en ella
    Worksheets("INDICE").Cells.Clear
End If

' Le ponemos un título a la hoja
Worksheets("Indice").Range("A1").value = "INDICE"

'/***************************************
'   SEGUNDO PASO: Vamos creando los enlaces
'                 de cada hoja, una por una.
'/***************************************
Dim fila As Long
Dim enlaceInicio As String

fila = 2
' ¿En qué celda quieres colocar el enlace de regreso al índice?
enlaceInicio = "B1"

For Each hoja In Worksheets
    If hoja.Name <> "INDICE" Then
        ' Creamos el enlace de regreso.
        With Worksheets("INDICE")
            .Hyperlinks.Add Anchor:=.Cells(fila, 1), _
            Address:="", _
            SubAddress:="'" & hoja.Name & "'!A1", _
            TextToDisplay:=hoja.Name
        End With

        With hoja
            .Hyperlinks.Add Anchor:=.Range(enlaceInicio), _
            Address:="", _
            SubAddress:="INDICE!A1", _
            TextToDisplay:="INDICE"
        End With
        fila = fila + 1
    End If
Next

End Sub

Hemos terminado

Una vez ejecutada la macro, verás cómo se ha creado automáticamente tu índice de hojas en Excel, dejándote el resto de la tarde libre para tus otras ocupaciones 😀

No olvides dejarme tus comentarios contándome cómo te fue con tu propio índice en Excel.

¡Nos vemos!

Cómo Proteger una Hoja de Excel usando Macros

Cómo desproteger una hoja de Excel usando Macros

Sí, ya te conté acerca de cómo puedes desbloquear una hoja de Excel, usando macros, si te has olvidado de la contraseña. Pero ¿y qué si quiero hacer lo contrario?

Es decir, si quisiera proteger una hoja de Excel usando Macros.

¿Y para qué?

Bueno, pues para permitir el acceso a una hoja solo cuando nosotros lo indiquemos dentro de nuestro código.

Imagina que, por ejemplo, tienes una hoja de registro de ventas, pero no quieres que nadie pueda escribir allí, hasta que hayan registrado una factura en la hoja de facturación.

Entonces, con este sencillo “truco”, puedes impedir que el usuario escriba nada en esa hoja hasta que se cumpla el requerimiento: Des-proteges, escribes y proteges de nuevo. Así de sencillo.

Interesante ¿o no?

Déjame mostrarte cómo hacerlo:

Desproteger una Hoja de Exce usando Macros

  • 2

    Escribe el código para proteger y des-proteger la hoja

Desproteger una Hoja de Exce usando Macros

  • 3

    Ejecuta tu macro y observa la magia

Ahora solo debes ejecutar tu macro, tal y como lo haríamos con una macro grabada. Ejecuta primero la macro “ProtegerHoja”.

Desproteger una Hoja de Exce usando Macros

Si ya ejecutaste la macro “ProtegerHoja”, entonces trata de hacer un cambio en tu hoja. Verás que no te lo permite y te muestra un mensaje como este:

Desproteger una Hoja de Exce usando Macros

Necesariamente vas a tener que ejecutar la macro “DesprotegerHoja”, si quieres escribir o hacer cualquier cambio. Tienes el control sobre posibles “errores” en el ingreso de datos.

Importante:

Ten en cuenta que esta no es una protección total, ya que en el artículo anterior, te demostré que es posible saltarse esta protección. La idea es evitar esos datos erróneos que, nuestros usuarios involuntariamente, pudieran ingresar en las bases de datos.

¡Misión Cumplida!

Y así has conseguido tu objetivo, has protegido tu hoja usando macros y con una contraseña que el usuario no necesita saber. ¡Fácil y sencillo!

¿Te imaginas el provecho que le podrías sacar a este “truco”?

¿Quieres descargar el archivo de ejemplo?

Haz clic aquí y descarga el archivo.

Ahora que tienes la idea de cómo hacerlo, cuéntame, ¿de qué forma piensas aprovechar esta técnica?

¿Crees que puede serte de alguna utilidad?

Te espero en los comentarios.

¡Nos vemos!

Raymundo