¿Cómo obtener la ruta de la hoja de trabajo actual en VBA?
141
Escribí una macro como complemento, y necesito obtener la ruta de la hoja de trabajo actual en la que se está ejecutando. ¿Cómo hago esto? ¿Cómo obtengo la ruta del archivo (solo el directorio)?
¿Quiere decir que, dada una hoja de trabajo, desea saber la carpeta donde se guarda el libro de trabajo principal?
Mathias
Respuestas:
264
Úselo Application.ActiveWorkbook.Pathsolo para la ruta en sí (sin el nombre del libro) o Application.ActiveWorkbook.FullNamepara la ruta con el nombre del libro.
Activeworkbook depende de qué libro de trabajo esté activo. USe Thisworkbook.path
Alwyn Miranda
66
Ambos son útiles en diferentes situaciones, por supuesto. Tomé la pregunta original en el sentido de que la macro residía en un libro de trabajo complementario (que sería ThisWorkbook.path), pero necesitaba ejecutar código contra otros libros de trabajo según lo necesite el usuario (que sería ActiveWorkbook.path).
BradC
2
Siempre debe ser explícito: si es este libro de trabajo, debería ser application.thisworkbook.path. Si se está abriendo un libro de trabajo, el nombre debe definirse con un conjunto, luego application.Variablename.path (o fullpath, dependiendo).
Selkie
@Selkie Si el código mismo abre el libro, entonces seguro. Pero si se trata simplemente de una macro auxiliar que reside en un libro de trabajo complementario y necesita funcionar en cualquier libro de trabajo que el usuario tenga actualmente abierto cuando invoque la macro, entonces ActiveWorkbookes lo que se necesita.
BradC
3
Excel.ActiveWorkbook.Pathsolo funciona si el archivo se ha guardado al menos una vez. Además, si el archivo nunca se ha guardado, Excel.ActiveWorkbook.FullNamesolo devuelve el nombre del archivo. Puede ser una buena idea verificar si alguna vez se guardó el libro .
Si desea obtener la ruta del libro desde donde se ejecuta la macro, use Application.ThisWorkbook.Path. Application.ActiveWorkbook.Patha veces puede producir resultados inesperados (por ejemplo, si su macro cambia entre varios libros de trabajo).
Respuestas:
Úselo
Application.ActiveWorkbook.Path
solo para la ruta en sí (sin el nombre del libro) oApplication.ActiveWorkbook.FullName
para la ruta con el nombre del libro.fuente
ActiveWorkbook
es lo que se necesita.Excel.ActiveWorkbook.Path
solo funciona si el archivo se ha guardado al menos una vez. Además, si el archivo nunca se ha guardado,Excel.ActiveWorkbook.FullName
solo devuelve el nombre del archivo. Puede ser una buena idea verificar si alguna vez se guardó el libro .Siempre es bueno tener:
fuente
Si desea obtener la ruta del libro desde donde se ejecuta la macro, use
Application.ThisWorkbook.Path
.Application.ActiveWorkbook.Path
a veces puede producir resultados inesperados (por ejemplo, si su macro cambia entre varios libros de trabajo).fuente
La forma más rápida
fuente