Comment obtenir le chemin de la feuille de calcul actuelle dans VBA?

141

J'ai écrit une macro en tant que complément et j'ai besoin d'obtenir le chemin de la feuille de calcul actuelle sur laquelle elle est exécutée. Comment puis-je faire cela? Comment obtenir le chemin du fichier (uniquement le répertoire)?

l --''''''--------- '' '' '' '' '' '
la source
voulez-vous dire que, étant donné une feuille de calcul, vous voulez connaître le dossier dans lequel le classeur parent est enregistré?
Mathias

Réponses:

264

Utilisez Application.ActiveWorkbook.Pathuniquement pour le chemin d'accès lui-même (sans le nom du classeur) ou Application.ActiveWorkbook.FullNamepour le chemin d' accès avec le nom du classeur.

BradC
la source
24
Le classeur actif dépend du classeur actif. Utilisez Thisworkbook.path
Alwyn Miranda
6
Les deux sont bien entendu utiles dans différentes situations. J'ai pris la question d'origine pour signifier que la macro résidait dans un classeur de complément (qui serait ThisWorkbook.path), mais devait exécuter du code sur d'autres classeurs selon les besoins de l'utilisateur (qui serait ActiveWorkbook.path).
BradC
2
Doit toujours être explicite - s'il s'agit de ce classeur, il doit s'agir de application.thisworkbook.path. S'il s'agit d'un classeur en cours d'ouverture, le nom doit être défini avec un ensemble, puis application.Variablename.path (ou fullpath, selon).
Selkie
@Selkie Si le code lui-même ouvre le classeur, alors bien sûr. Mais s'il s'agit simplement d'une macro d'assistance qui réside dans un classeur de complément et qui doit fonctionner sur le classeur que l'utilisateur a actuellement ouvert lorsqu'il appelle la macro, alors ActiveWorkbookc'est ce qui est nécessaire.
BradC
3
Excel.ActiveWorkbook.Pathne fonctionne que si le fichier a été enregistré au moins une fois. De plus, si le fichier n'a jamais été enregistré, Excel.ActiveWorkbook.FullNamerenvoie uniquement le nom du fichier. Cela peut être une bonne idée de vérifier si le classeur a déjà été enregistré .
ChrisB
37

Toujours agréable d'avoir:

Dim myPath As String     
Dim folderPath As String 

folderPath = Application.ActiveWorkbook.Path    
myPath = Application.ActiveWorkbook.FullName
Alex22
la source
27

Si vous souhaitez obtenir le chemin du classeur à partir duquel la macro est exécutée, utilisez Application.ThisWorkbook.Path.
Application.ActiveWorkbook.Pathpeut parfois produire des résultats inattendus (par exemple, si votre macro bascule entre plusieurs classeurs).

avalanche1
la source
-1

Le moyen le plus rapide

path = ThisWorkbook.Path
Pablo Vilas
la source