domingo, 4 de marzo de 2012

Libro de macros personal en Excel (Personal.xlsb).

Estamos muy acostumbrados a trabajar con macros o procedimientos Sub y Function de todo tipo en nuestros libros de trabajo de Excel, y en ocasiones determinadas macros las necesitamos recurrentemente en todos nuestros libros; es en estas ocasiones cuando en lugar de grabar estas macros en nuestro libro lo haremos en el Libro de macros personal (Personal.xlsb).
Debemos recordar que de forma predeterminada, cuando se crea una macro en Excel, la macro sólo funciona en el libro que lo contiene. Esto es lo normal y correcto siempre y cuando no sea necesario utilizar la macro en otros libros diferentes. Sólo las macros que guardamos en el Libro de macros personal estarán disponibles en cualquier libro cada vez que inicie Excel en el mismo equipo.
Al hilo de la cuestión de un comentario explicaré cómo y qué pasos tenemos que realizar para crear nuestro Libro de macros personal, y cómo Guardar macros en él.

...como hago para que la funcion definida se habra desde cualquier libro?...

Para tener siempre disponibles nuestras macros en Excel, independientemente del libro de trabajo que tengamos abierto, siempre en nuestro PC (eso sí), deberemos trabajar sobre un libro de trabajo 'especial': PERSONAL.XLS para versiones de Excel anteriores a 2007, y PERSONAL.XLSB para Excel 2007 ó 2010.
La siguiente cuestión a plantear es ¿dónde se guarda este libro de macros personal?. Localizarlo es sencillo, ya que podemos obtener la ruta de una manera muy sencilla.
Primero abriremos nuestro Editor de VBA, habilitando la Ventana de inmediato (Ctrl+G), y dentro de esta, escribiremos el siguiente código:
?Application.StartupPath ó print Application.StartupPath
al ejecutar esta instrucción veremos la ruta en cuestión, que dependerá de la versión de Windows con la que trabajemos; en mi caso, sigo trabajando con WindowsXP, asi que será:
C:\Documents and Settings\NombreUsuario\Datos de programa\Microsoft\Excel\XLSTART
para Windows7 o Vista la ruta sería:
C:\Users\NombreUsuario\AppData\Roaming\Microsoft\Excel\XLSTART.

Libro de macros personal en Excel (Personal.xlsb).


Mencionar que esta carpeta tiene el atributo de oculto, por lo que si quisieramos visualizar su contenido, la manera más sencilla sería copiar la ruta obtenida, tras modificar la característica en el Explrador de Windows Herramientas > Opciones de Carpeta > Ver > Mostrar todos los archivo y carpetas ocultas:
C:\Documents and Settings\NombreUsuario\Datos de programa\Microsoft\Excel\XLSTART
en el explorador de Windows, lo que nos abriría la carpeta directamente, pudiendo acceder al fichero en cuestión: PERSONAL.XLSB.


Para crear por primera vez este Libro de macros personal tendremos que usar el Asistente de grabación de macros y grabar cualquier proceso de prueba, bastaría con Grabar y Detener, nosotros es lo que haremos. Asi que, por ejemplo, desde la Ficha Programador > Código > Grabar Macro:

Libro de macros personal en Excel (Personal.xlsb).


Fundamental seleccionar en la opción de Guardar macro en: Libro de macros personal.
Tras Aceptar, procedemos a Detener la macro (Ficha Programador > Código > Detener Macro):

Libro de macros personal en Excel (Personal.xlsb).


Ya tenemos creado nuestro Libro de macros personal. Podemos verlo dentro del Editor de VBA, en el Explorador de Proyectos:

Libro de macros personal en Excel (Personal.xlsb).



Podremos renombrar este Libro si es nuestro deseo, para ello simplemente seleccionaremos el proyecto, y desde la ventana Propiedades modificaremos la propiedad Name. Yo voy a renombrar el proyecto por 'Excelforo':

Libro de macros personal en Excel (Personal.xlsb).


Cualquier macro (procedimiento Sub o Function) incluida en alguno de los módulos de este Libro será accesible desde cualquier Libro de trabajo al abrirlo en nuestro equipo.
Veamos un ejemplo con una función llamada 'prueba':

Libro de macros personal en Excel (Personal.xlsb).


Si abrimos un nuevo Libro y probamos a ejecutar nuestra función =PERSONAL.XLSB!prueba() veríamos:

Libro de macros personal en Excel (Personal.xlsb).

17 comentarios:

  1. Saludos ExcelForo

    Bueno la verdad que Excel no deja de sorprenderme, de momento no necesitare este Libro Personal pero en un futuro será una herramienta muy fuerte para mi, una vez más muchas gracias por sus Correos y enseñanzas ExcelForo.

    Un Cordial Saludo
    Lázaro.

    ResponderEliminar
  2. Como puedo quitar o cambiar el nombre de la macro? en el ejemplo anterior tienes que escribir en la celda "=PERSONAL.XLSB!prueba()" cambiarlo para solo escribir "=prueba()"

    ResponderEliminar
    Respuestas
    1. Hola, que tal estás?...espero también te encuentres bien.
      Date cuenta que el caso del ejemplo es una Función personalizada VBA añadida al libro de macros personal, por lo que como cualquier otra UDF creada en otro libro diferente al que estamos trabajando tendremos que llamarla así.

      Si quieres ejecutarla sólo con =prueba() tendrías que generar la función en el mismo libro de trabajo.

      Un cordial saludo

      Eliminar
  3. Hola espero estes bien, muy buena explicación. Tengo una pregunta espero me puedas responder.

    Mira soy nuevo en esto de las macros así que no se mucho pero bueno esta es la situación:

    Grabe dos macros en el libro personal para macros y las probe en ese archivo donde las hice, (En ese archivo no las guarde, pero ahi las hice) Las macros en ese libro donde las cree funcionan muy bien, pero cuando las ejecuto en otros archivos me sale el error 1004 error en la seleccion de la clase range. ¿Porque sucede eso? Estoy haciendo mal algo?

    Cuando lei tu explicación de guardar las macros en el libro personal me parecio excelente, pero desgraciadamente solo las puedo utilizar en un solo libro, aunque las haya guardado en el libro personal de macros.

    En fin espero que me puedas ayudar Gracias.

    ResponderEliminar
    Respuestas
    1. Hola,
      podría haber ocurrido que al grabar las macros hicieras referencia a algo (algún objeto) concreto que sólo existía en el fichero desde donde la grabaste la primera vez.. y al intentar ejecutar las macros en otros libros, donde no existe ese objeto, obviamente falle...
      Revisa el código grabado, y asegúrate no se hace referencia a ninguna hoja, gráfico, etc.. con un nombre que sólo exista en el fichero original...

      Este suele ser el fallo más normal... aunque es difícil decirlo.
      Saludos

      Eliminar
  4. Gracias por esta informacion me fui util para resolver un problema de macros aqui en mi trabajo en monterrey. Ya se me habia presentado anteriormente y no habia sabido como atenderlo.

    ResponderEliminar
  5. Hola buenos días, una pregunta como hago para cambiar un libro personal xlsb a nueavante libro 1? es que no se que hize y desconfigure el programa de Excel 2010 y quisiera que cuando abra el libro diga libro 1,gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      prueba primero borrando el libro de macros personal.xlsb..
      por seguridad guarda un backup de dicho archivo.

      Saludos

      Eliminar
  6. Tengo un libro abierto de Excel que se actualiza cada 3 minutos. pero cuando abro otra hoja Excel se me vincula la macro del libro abierto y no puedo trabajar en dicha hoja. además, si colocada la acción calcular manual en la hoja también se coloca manual en el libro por lo cual no se activa en el tiempo dado para que se actualice. Tengo Excel 2016

    ResponderEliminar
    Respuestas
    1. Hola Sebastián,
      entiendo has lanzado un proceso de bucle temporal para ejecutar un procedimiento/macro.
      Es algo que en general no me gusta ya que interfiere en el desarrollo normal del resto de acciones (por los recursos que consume la macro en constante ejecución).

      En todo caso, yo probaría en la macro recurrente a especificar en qué Libro y hoja en concreto quieres realizar la acción que tengas descrita.

      Slds

      Eliminar
  7. Estimado:
    Junto con saludarlo, le informo que el libro en cuestión saca cada tres minutos información de un servidor del estado de equipos en servicio. Te envió macro

    Private Sub Workbook_Open()
    MsgBox "Se aplico Macro, se actualizará cada 3 minuto en forma automática"
    Worksheets("EVAS").Range("A1").Value = Time
    Worksheets("Situación Actual").Range("A1").Value = Time
    Worksheets("EVAS-3").Range("A1").Value = Time
    Application.OnTime Now + TimeValue("00:03:00"), "ActualizaHora"
    End Sub
    Sub ActualizaHora()
    Range("A1").Value = Time
    DisparaActualizador
    End Sub

    Sub DisparaActualizador()
    Application.OnTime Now + TimeValue("00:03:00"), "ActualizaHora"
    End Sub

    ResponderEliminar
    Respuestas
    1. En sí los procedimientos son correctos...
      es el problema de los bucles temporales, y tener activo un procedimiento constantemente.

      Lo siento, poco se puede hacer.
      Saludos

      Eliminar
  8. Ante todo felicitarle por compartir sus conocimientos desinteresadamente para con nosotros los que iniciamos en el mundo de las macros!! Estoy armando unas plantillas con lo que trabajo a diario y tengo una base de datos de clientes con su respectiva informacion fiscal y quería saber si puedo grabar esta base de datos en el libro de macros personal para tener esa base para poder consultarla (ya sea con fórmulas ó código VBA) con cualquier libro que trabaje en excel. Agradecido de antemano y saludos desde Venezuela!!!!

    ResponderEliminar
    Respuestas
    1. Hola Pedro,
      es cierto que en el fondo, el libro PERSONAL.XLSB es un libro de Excel 'normal', y en el que efectivamente podrías guardar esa base de datos... pero funcionaría exactamente igual a la hora de recuperar datos de él, esto es, tendrías que abrirlo como cualquier otro.
      Con sinceridad no me parece una buena práctica... me parece mejor incorporar ese base de datos en un libro 'normal' y acceder a él a través de vínculos, macros etc.

      Un cordial saludo y gracias!!

      Eliminar
  9. DISCULPE MIRE TENGO LA SIGUEINTE SITUACION, TENGO QUE GRABAR UNA MACRO PARA FILTRAR Y CONSOLIDAR UNOS DATOS, PERO EL ARCHIVO DE DONDE EXTRAIGO LA INFORMACION ES UN ARCHIVO QUE DESCARGO DE UNA PLATAFORMA QYE TENEMOS Y CONSTANTEMENTE ESTAN CAMBIANDO LOS DATOS, POR LO QUE SOLO PUEDO VER DE MANERA TEMPORAL LA INFORMACION Y EJUCATAR LA MACRO UNA SOLA VEZ YA QUE CUANDO VUELVO A DESCARGAR EL ARCHIVO E INTENTO EJECUTAR LA MACRO ME MARCA ERROR, QUE PODRIA HACER PARA HACERLA FUNCIONAR CON UN ARCHIVO QUE TENGO QUE DESCARGAR CONSTANTEMENTE SALUDOS

    ResponderEliminar
    Respuestas
    1. Hola,
      quizá lo más simple sea realizar una conexión de datos hacia un fichero (el descargado) que siempre se descargue con el mismo Nombre y misma Ubicación.. asi tendrás en tu plantilla una vista de esos datos volcados... sin necesidad de macros.

      Si optas por las macros, podrías emplear lo expuesto aquí:
      http://excelforo.blogspot.com.es/2013/10/vba-el-metodo-getopenfilename-para.html
      para seleccionar la ubicación del archivo cada vez...

      Espero te oriente

      Saludos

      Eliminar