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).

48 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
  10. intento grabar en esta carpeta pero me sale un comentario que dice: el libro de macros personal en la carpeta de inicio debe estar abierto para grabar...y no me deja como puedo abrirlo?

    ResponderEliminar
    Respuestas
    1. Hola que tal?
      El libro de macros personal es un libro 'normal', puedes abrirlo sin problemas como cualquier otro libro.
      Búscalo con las rutas que se indican en el post, ábrelo

      Saludos

      Eliminar
  11. Buenas Tardes.. Al guardar las macros en el libro de macros personal hace que esten disponibles en cualquier libro nuevo que cree.

    Mi pregunta es la siguiente:

    Hay forma de que esas macros se puedan habilitar en los archivos que ya tengo creados en la pc, archivos viejos?

    Gracias!

    ResponderEliminar
    Respuestas
    1. Hola Adriana,
      las macros guardadas en personal deben estar visibles desde cualquier libro que abras en tu equipo...

      a veces pasa que hay que abrir el Libro de macros personal para tenerlas visibles.

      Slds

      Eliminar
  12. Hola, por favor quiero saber si está activa la ayuda.


    Gracias

    ResponderEliminar
  13. Es para lo siguiente:

    Tengo un libro con macros en Excel que cuando lo abro imposibilita insertar columnas o filas en otro libro sin macros que tengo abierto o cualquier otro libro de excel nuevo.

    De otra manera: lo que sucede es que debo insertar filas y columnas en el mismo libro, y no sólo Excel no lo ejecuta, sino que no me deja insertar filas y columnas en el .

    ResponderEliminar
    Respuestas
    1. Hola
      habría que ver cómo tienes dispuesta la macro...
      pero probablemente tengas que concretar más en qué libro permites trabajar y en cuáles no.
      Slds

      Eliminar
  14. Saludos amigo, es posible cambiar de ubicación el libro PERSONAL.XLSB (por ejemplo si quiero cambiarlo a una carpeta que se me sincronice con la nube).

    ResponderEliminar
    Respuestas
    1. Hola, no podría asegurarlo al 100%
      Pero es bien cierto que es un fichero 'normal' que puedes abrir y copiar y pegar, por lo que sí podrías situar en cualquier lugar, y poder abrirlo cuando lo necesites.
      No he probado nunca pero en principio si parece posible

      Slds

      Eliminar
    2. Saludos nuevamente. La idea sería forzar a que Excel abra automaticamente PERSONAL.XSLB en su nueva ubicación y no desde la ruta predeterminada (C:\Users\NombreUsuario\AppData\Roaming\Microsoft\Excel\XLSTART. o según corresponda a la versión del OS).

      Eliminar
  15. Hola Nuevamente!: Su blog es genial!!!, he aprendido mucho !!!!
    Utilizo userforms alojados en Personal.xlsb y los llamo desde otros libros pero a través de una macro alojada en personal...no hay otro modo directo de llamar al userform directamente desde personal? No encuentro nada al respecto...Mil gracias!!!!

    ResponderEliminar
    Respuestas
    1. Hola
      muchas gracias ;-)

      En principio no sería posible.. al fin y al cabo, estamos hablando de libros distintos.
      Quizá te interese más crearte un complemento con tus macros y userform y así poder abrirlos de igual forma desde cualquier libro...
      Saludos cordiales

      Eliminar
    2. Entiendo, es que mis libros usan las mismas macros y userforms..... pero que interesante, no se me había ocurrido!!, voy a chequear...Mil gracias!!!

      Eliminar
  16. Me resulto muy útil ...solo hay que cambiar print por msgbox para que te de la ubicación ...me salia un error con print en excel 2016 ...gracias ..saludos

    ResponderEliminar
  17. Buenas.
    1. Tengo un LIBRO1 que tiene macros y hace llamadas a otras macros generales que las tengo en el libro PERSONAL.XLSB. La llamada es normal de esta forma Call MacrodePersonal (Parámetro1). Esto me da un error que dice NO SE HA DEFINIDO SUB O FUNTION..
    2. Cambié la llamada así: Application.Run "PERSONAL.XLSB! MacrodePersonal (Parámetro1)" y me da este otro error: NO SE PUEDE EJECUTAR LA MACRO PERSONAL.XLSB! MacrodePersonal. Puede que la macro no esté disponible en este libro o que se hayan deshabilitado todas las macros.
    3. Me di cuenta que si llamo a la macro con usando Application.Run, pero si esta macro NO tiene parámetros entonces sí funciona. ¿Cómo se hace?
    Agradezco la ayuda.

    ResponderEliminar
    Respuestas
    1. Hola,
      yo intentaría:
      Application.Run "'PERSONAL.XLSB'!MacrodePersonal", "Parámetro1"

      debería funcionar
      Saludos

      Eliminar
  18. Tengo otro problema al usar el PERSONAL.XLSB. Resulta que abro el libre y por supuesto el PERSONAL.XLSB entra a funcional. Si pongo esta instruccion "ThisWorkbook.Path" me retorna la ruta del PERSONAL y no la del Libro de trabajo. Alguien sabe como obtener la ruta del libro de trabajo cuando estoy usando el PERSONAL

    ResponderEliminar
  19. Disculpas ya se resolvió es: ActiveWorkbook.Name

    ResponderEliminar
  20. Hola buenas noches, tengo la siguiebte situación. Trabaje una hoja de excel con macros. Pero cuando fui a guardar guarde el archivo como libro de excel, y no como libro de Excel habilitado para macros. Cuando abri de nuevo el archivo ninguno de los botones programados funcionaba, y tampoco esta la programacion. Que puedo hacer?

    ResponderEliminar
    Respuestas
    1. Hola Daniela
      pues lamentablemente nada se puede hacer... tendrás que empezar desde cero y tener la precaución, antes de nada, de guardar el libro como .xlsm
      Saludos cordiales

      Eliminar
  21. Hola... expongo la siguiente situación en particular.
    Al crear el libro personal para macros (.XLSB), guardo proyecto... y al momento de cerrar la aplicación Excel me cierra primero el libro e intento de cerrar nuevamente y por fin cierra del todo Excel... ¿Por qué ocurre eso?, ¿es normal?...

    saludos!!! :)

    ResponderEliminar
    Respuestas
    1. Hola Francisco
      piensa que tienes DOS libros abiertos... al fin y al cabo el Personal.xlsb es un libro de Excel binario....
      Saludos

      Eliminar
  22. Entiendo!!! :D
    Muchas gracias por tu respuesta, Ismael
    Saludos!!

    ResponderEliminar
  23. hola como estas?? intento grabar en esta carpeta pero me sale un comentario que dice: el libro de macros personal en la carpeta de inicio debe estar abierto para grabar...y no me deja hacer nada, como puedo crear nuevamente esa carpeta o archivo?? ya que solo puedo guardar macros en los libros

    ResponderEliminar
    Respuestas
    1. Hola!
      Si no existe el libro PERSONAL.xlsb en la ubicación que corresponda, al tratar de guardar una macro en ese libro personal, Excel lo generará y lo abrirá automáticamente
      Saludos

      Eliminar
    2. no me lo permite, solo me deja guardar macros en los mismos libros, al guardar en mi libro de macro personal me arroja error...... que mas se puede hacer????

      Eliminar
    3. Hola
      asegúrate que la ruta es la correcta... si aún así falla, abre un libro normal .xslx y guárdalo como binario (.xlsb) con el nombre personal y muévelo donde corresponda (en la ubicación que le toque)...
      saludos

      Eliminar
  24. hola:
    tengo un libro personal de macros guardado y cada vez que lo abro, lo abre con un numero añadido al nombre de la excel, es decir se llama Calendario.xltm y cuando lo abro se llama Calendario1.xltm. A que se debe?

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.