web-dev-qa-db-fra.com

Comment obtenir le répertoire de travail actuel en utilisant vba?

J'utilise MS Excel 2010 et j'essaie d'obtenir le répertoire actuel en utilisant le code ci-dessous,

    path = ActiveWorkbook.Path

Mais ActiveWorkbook.Path renvoie vide.

48
Ullan

J'ai testé ceci:

Lorsque j'ouvre un document Excel D:\db\tmp\test1.xlsm:

  • CurDir() renvoie C:\Users\[username]\Documents

  • ActiveWorkbook.Path renvoie D:\db\tmp

Donc, CurDir() a une valeur système par défaut et peut être modifié.

ActiveWorkbook.Path ne change pas pour le même classeur enregistré.

Par exemple, CurDir() change lorsque vous exécutez la commande "Fichier/Enregistrer sous" et sélectionnez un répertoire aléatoire dans la boîte de dialogue de sélection Fichier/Répertoire. Cliquez ensuite sur Annuler pour ne pas enregistrer. Mais CurDir() a déjà changé pour le dernier répertoire sélectionné.

81
jacouh

Vous avez plusieurs options selon ce que vous recherchez .Workbook.Path renvoie le chemin d'accès d'un classeur enregistré. Application.Path renvoie le chemin d'accès à l'exécutable Excel. CurDir renvoie le chemin de travail en cours; il s'agit probablement du dossier Mes documents ou d'un dossier similaire.

Vous pouvez également utiliser la propriété .CurrentDirectory de l'objet shell de script windows.

Set wshell = CreateObject("WScript.Shell")
Debug.Print wshell.CurrentDirectory

Mais cela devrait donner le même résultat que juste

Debug.Print CurDir
8
AndASM

Il semblerait que ActiveWorkbook n’a pas été sauvegardé ...

Essayez CurDir() à la place.

7
Monty Wild

Votre code: path = ActiveWorkbook.Path

renvoie vide car vous n'avez pas encore enregistré votre classeur.

Pour résoudre votre problème, revenez à la feuille Excel, enregistrez votre feuille et réexécutez votre code.

Cette fois, il ne sera pas vide, mais vous montrera le chemin où il se trouve (dossier actuel)

J'espère que cela a aidé.

4
Mohamed Tahir

Utilisez Application.ActiveWorkbook.Path pour le chemin lui-même (sans le nom du classeur) ou Application.ActiveWorkbook.FullName pour le chemin portant le nom du classeur.

1

C'est la VBA que j'utilise pour ouvrir le chemin actuel dans une fenêtre Explorer:

Shell Environ("windir") & "\Explorer.exe """ & CurDir() & "",vbNormalFocus

Documentation Microsoft

0
ashleedawg

Si vous voulez vraiment dire répertoire de travail pur, cela devrait vous convenir.

Solution A:

Dim ParentPath As String: ParentPath = "\"
Dim ThisWorkbookPath As String
Dim ThisWorkbookPathParts, Part As Variant
Dim Count, Parts As Long

ThisWorkbookPath = ThisWorkbook.Path
ThisWorkbookPathParts = Split(ThisWorkbookPath, _
                        Application.PathSeparator)

Parts = UBound(ThisWorkbookPathParts)
Count = 0
For Each Part In ThisWorkbookPathParts
    If Count > 0 Then
        ParentPath = ParentPath & Part & "\"
    End If
    Count = Count + 1
    If Count = Parts Then Exit For
Next

MsgBox "File-Drive = " & ThisWorkbookPathParts _
       (LBound(ThisWorkbookPathParts))
MsgBox "Parent-Path = " & ParentPath

Mais si ce n'est pas le cas, cela devrait suffire.

Solution B:

Dim ThisWorkbookPath As String

ThisWorkbookPath = ThisWorkbook.Path
MsgBox "Working-Directory = " & ThisWorkbookPath 
0
NOTSermsak