lunes, febrero 05, 2007

Macros Excel – haciéndolas disponibles para todos los cuadernos

Con Excel es relativamente fácil crear macros. Uno de los usos más corrientes es automatizar tareas. No hace falta ser un profesional del Vba (Visual Basic for Applications) para automatizar tareas sencillas con macros.
Así que supongamos que hemos desarrollado una macro para formar la fuente de la selección a negrita (bold) y el fondo de las celdas a gris.
La forma más fácil es utilizar la grabadora de macros.




El resultado es el siguiente



Cambiamos el nombre de la macro a N_gris, y eliminamos la primer línea de la macro, para que podamos aplicarla a cualquier rango que elijamos en la hoja



Sub N_gris()
'
' Macro1 Macro
' Macro grabada el 05/02/2007 por JLD
'

'
Selection.Font.Bold = True
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
End Sub


Para poder usarla con facilidad asociamos una combinación de teclas a la macro (Herramientas—Macros—Opciones)




Ahora tenemos una macro que nos permite aplicar los formatos pulsando Ctrl+Mayúsculas+N a cualquier rango que hayamos seleccionado.

Para usar esta macro en hojas de otros cuadernos podemos:

1 – Abrir el cuaderno donde grabamos la macro. De esta manera estará disponible para todos los cuadernos abiertos en la sesión.

2 – Guardar la macro en el cuaderno Personal.xls. Excel crea este cuaderno automáticamente la primera vez que grabamos una macro en él. Normalmente este cuaderno está oculto, pero las macros que contiene están disponibles en cada sesión de Excel.

Para crear Personal.xls, simplemente grabamos una macro en él (basta con activar la grabadora e inmediatamente terminar la grabación)




Una vez hecho esto, podemos ver en la ventanilla Proyectos el Personal.xls




Copiamos la macro a un módulo de Personal, y la macro estará disponible cada vez que iniciemos una sesión de Excel.


Supongamos ahora que queremos distribuir nuestra macro a otros usuarios. Una posibilidad es darles una copia del cuaderno con la macro. Estos usuarios podrán luego copiar la macro a su propio Personal.

Otra posibilidad, más eficiente, en guardar la macro como complemento (Add in) y guardarlo en una carpeta pública, de donde cada usuario autorizado podrá instalarlo.
Mostraremos esta técnica en la próxima nota.

Technorati Tags:

11 comentarios:

  1. Estimado Jorge

    Encontre tu pagina buscando ayuda a un problema que se me presento, despues de buscar y no encontrarla en tu blog quisiera que me ayudes con lo sgte. Una macro que busque repetidos en una colimna y de un mensaje de aviso.
    Gracias

    ResponderBorrar
  2. Hola
    si haces una búsquea en la Internet encontrarás muchas macros que hacen esa tarea.
    En mi blog puedes leer la nota Evitando duplicados con Validación de Datos en Excel sobre una solución sin macros.
    También puedes usar Formato Condicional para señalar duplicados poniendo un fondo de color en la celda.

    ResponderBorrar
  3. Buenas Jorge antes que todo te felicito por tu pagina excelente, Una pregunta: tengo una serie de datos que cargo en una hoja, como puedo crear un boton que al hacerle un clip, me vaya a una hoja especifica en el mismo libro

    ResponderBorrar
  4. Hola
    con Sheets(nombre de la hoja).Activate

    Por ejemplo para ir a la Hoja1

    Sub ir_a_hoja1()
    Sheets("Hoja1").Activate
    End Sub

    Luego ligas la macro al botón.

    ResponderBorrar
  5. Pues aquí estoy, usuario anónimo perezoso (eso de loguearse es tan aburrido).

    No tengo preguntas que hacer, por que está todo muy bien explicado, así que el objetivo de este mensaje es felicitarte y agradecerte tu trabajo. Ahí va;
    ¡Felicidades y gracias por tu trabajo!

    Siendo como soy un usuario anonimo perezoso, espero entiendas el valor de este, mi mensaje de felicitació y agradecimiento.

    Saludos cordiales, y sigue aportando tu grano de arena por el bien del mundo mundial.

    ResponderBorrar
  6. tengo el siguiente problema: quiero controlar la grabacion de un libro, y encontre en la ayuda de excel, el siguiente ejemplo:
    En este ejemplo se pide confirmación al usuario antes de guardar el libro.

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
    Cancel as Boolean)
    a = MsgBox("Do you really want to save the workbook?", vbYesNo)
    If a = vbNo Then Cancel = True
    End Sub

    Pero aun poniendo la variable "cancel" en true, graba de todas formas.

    muchas gracias por la colaboracion.

    ResponderBorrar
  7. ¿A qué te refieres con "grabar"? La macro (en realidad es un evento que debe ponerse en el módulo de la hoja correspondiente) abre un diálogo cuando el usurario quiere guardar el cuaderno. Ai el usuario aorieta "Yes" Excel guarda el cuaderno; si aprieta "No" se interrumpe le proceso.

    ResponderBorrar
  8. Por favor tu ayuda con el siguiente problema: en el archivo Personal.xlsb grabé algunas funciones en VB que hacen referencia a parámetros que el usuario debe previamente registrar en la hoja "Parámetros" del libro donde requiere utilizar dicha función. Sin embargo, la función hace referencia sólo a la hoja y no al nombre del libro. Luego, supongo que por defecto la función buscara la hoja "Parámetros" en el libro activo o no ???. Necesariamente debo indicar el nombre del libro ???. Si lo anterior fuese necesario, entonces también debo indicar la ruta del libro???

    ResponderBorrar
  9. Hola, supongo que te refieres a una rutina de VB, ya que no se pueden grabar funciones.
    De todas maneras, por defecto Excel buscará en el cuaderno activo. Si surge la necesidad de referirse al cuaderno activo puedes usar ActiveWorkbook.

    ResponderBorrar
  10. hola, quisiera saber como repetir una macro con vb cuando no tengo una determinada cantidad de celdas.
    Ejemplo: mi macro sería:
    Sub Sum()
    Range("O7").Value = Range("M7").Value + Range("N7").Value
    End Sub

    dejaria de repetirse, cuando haya alguna celda en la columna D vacia.

    ResponderBorrar
  11. Julio, para repetir una acción mientras se cumpla una condición puedes usar Do While...Loop, por ejemplo:

    Dim i As Integer
    i = 1

    Do While i < 6
    Cells(i, 1).Value = 20
    i = i + 1
    Loop

    La macro que pones no tiene sentido para el ejemplo, ya que estarías escribiendo el resultado siempre a la misma celda O7.

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.