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.
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é.
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
Il semblerait que ActiveWorkbook n’a pas été sauvegardé ...
Essayez CurDir()
à la place.
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é.
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.
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:
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