Hojas de cálculo en Excel - página principal

Obtener el nombre de un archivo excel

Algunas veces nos vemos en la necesidad de utilizar el nombre del fichero de excel que estamos utilizando por ejemplo en un macro, pero otras veces, dependiendo de lo que queramos hacer, igual nos conformamos con obtener el nombre del archivo con el que estamos trabajando, para colocarlo en una celda.

La primera de las opciones, a través de un macro, es muy sencilla. Basta con incorporar este código desde VBA:


'Pasamos el nombre a una variable
nombre_del_fichero = ThisWorkbook.Name

Lo que quería comentar, es que se puede obtener el nombre del fichero sin necesidad de utilizar macros. Es un poco rebuscado el sistema, pero funciona perfectamente y es fiable al 100%. En cualquier celda donde desees mostrar el nombre del fichero, pon este código de forma literal (haz directamente, un copiar y pegar, teniendo en cuenta que debe ir toda la fórmula en una misma línea, para que no haya problemas de visualización con Firefox):

=EXTRAE(CELDA("nombrearchivo";A1);ENCONTRAR("[";CELDA("nombrearchivo";A1))+1;
ENCONTRAR("]";CELDA("nombrearchivo";A1))-ENCONTRAR("[";CELDA("nombrearchivo";A1))-1)

Para que esa fórmula nos funcione correctamente, deberemos tener en cuenta que debe estar guardado el libro de excel, porque en caso contrario dará error. Es decir, no te funcionará esa fórmula en un nuevo libro creado "al vuelo" si previamente no lo has guardado.



8 comentarios:

Anónimo dijo...

La formula se sale de la página.

Al menos así se visualiza en firefox.

El pilt®afilla - www.3piesalgato.com dijo...

Ya he cambiado la fórmula, con un pequeño comentario, pues en pantalla sale en dos líneas, pero habría que copiarlas y pegarlas como si solo fueran una.

Muchas gracias por informarme.

Anónimo dijo...

Hola Javier, oye quiero pedirte ayuda,mi problema es el siguiente: quiero que dentro un una caja de texto en un userform salga el nombre del archivo activo, pero mi problemas es que EL ARCHIVO DE EXCEL QUE QUIERO QUE NOMBRE lo necesito abrir de forma temporal Y como lo abro de forma temporal me devuelve el nombre del archivo temporal(~K5D041.tmp) y NO el nombre real del archivo (Libro1.xls), pero si yo GRABO UN MACRO en este archivo temporal exportando datos a otro libro si me pone en el macro el nombre REAL del archivo(Libro1.xls)... ¿como puedo hacer para que me salga el nombre REAL(Libro1.xls) y no el TEMPORAL(~K5D041.tmp) del archivo?.

El pilt®afilla - www.3piesalgato.com dijo...

Hola que tal...

Pues en las pruebas que he hecho, yo tampoco consigo devolver el nombre original del fichero. Las propiedades que proporciona VBA son una versión recortada de Visual Basic, así que imagino que los tiros vienen por ahí, y esa limitación tiene mucho que ver a la hora de trabajar con el nombre temporal y no con el real del fichero.

Seguiré investigando, pero en la medida de lo posible, deberías trabajar con ficheros reales, ya que con el temporal te puedes encontrar con más sorpresas de ese tipo.

Salu2

Javier Á. Herrero dijo...

buenas
mi problema es el siguiente: yo tengo un fichero (llamemosle principal) donde ejecuto una macro q lo primero q hace es abrir otro fichero (secundario) para copiar los datos q tiene y luego más adelante me interesa volver a este fichero para pegar los datos modificados. pero como el nombre de este fichero cada vez es distinto necesito extraer su nombre. lo he intentado de la primera manera (nombre_del_fichero = ThisWorkbook.Name)pero no me funciona porque aún haciéndolo en el fichero secundario me devuelve el nombre del principal (yo entiendo q es porque me devuelve el nombre del fichero q tiene la macro). Y lo hice de la segunda manera (la fórmula esa larguísima) y me funcionaba bien, pero de repente me ha dejado de funcionar, y es q no lo entiendo porque el fichero principal está protegido sobre escritura y no se ha modificado, pero de repente la fórmula esta no me funciona. Sabeis porque puede pasar esto u otra manera para poder obtener en una macro el nombre del fichero en el que estoy??

muchas gracias

El pilt®afilla - www.3piesalgato.com dijo...

Para que la función esa tan larga te funcione, el fichero debe haber sido guardado (debe estar en el disco duro, en una USB, etc). Es decir, no funciona en un fichero creado "al vuelo", si no se ha guardado en alguna ocasión.

Si no te funciona, prueba esta línea de código, que te devuelve el nombre del libro activo (el que está en primer plano, vamos el libro con el que estás trabajando en ese momento):

nombre_del_archivo = ActiveWorkbook.Name

Javier Á. Herrero dijo...

Joder tío como te quiero. Me estaba volviendo loco y con la formulita q me has puesto me ha funcionado perfectamente. Encima q rapidez en contestar.

Y lo de la fórmula larga ya sabía q tiene q estar grabado pero es q no se q co**nes le pasa q antes me funcionaba perfectamente y justo cuando le paso la macro a mi jefa va y casca (la macro, no la jefa). y es q haciendo pruebas me ha dejado de funcionar en ese archivo aunque si q me funciona en otros. No se, es muy raro pero con la otra manera q me has puesto me sobra y me basta.
Muchiiiiiiiiisimas gracias

El pilt®afilla - www.3piesalgato.com dijo...

Me alegro que te haya funcionado :-)