¿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)?

l --''''''--------- '' '' '' '' '' ''
fuente
¿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.

BradC
fuente
24
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 .
ChrisB
37

Siempre es bueno tener:

Dim myPath As String     
Dim folderPath As String 

folderPath = Application.ActiveWorkbook.Path    
myPath = Application.ActiveWorkbook.FullName
Alex22
fuente
27

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

avalancha1
fuente
-1

La forma más rápida

path = ThisWorkbook.Path
Pablo Vilas
fuente