Ich verwende MS Excel 2010 und versuche, das aktuelle Verzeichnis mit dem folgenden Code abzurufen.
path = ActiveWorkbook.Path
ActiveWorkbook.Path gibt jedoch leer zurück.
Ich habe das getestet:
Beim Öffnen eines Excel-Dokuments D:\db\tmp\test1.xlsm
:
CurDir()
gibt C:\Users\[username]\Documents
zurück
ActiveWorkbook.Path
gibt D:\db\tmp
zurück
CurDir()
hat also einen Systemstandard und kann geändert werden.
ActiveWorkbook.Path
ändert sich nicht für dieselbe gespeicherte Arbeitsmappe.
Beispielsweise ändert sich CurDir()
, wenn Sie den Befehl "Datei/Speichern unter" ausführen und im Dialogfeld "Datei/Verzeichnis" ein zufälliges Verzeichnis auswählen. Klicken Sie anschließend auf Abbrechen, um das Speichern zu überspringen. CurDir()
hat jedoch bereits zum zuletzt ausgewählten Verzeichnis gewechselt.
Je nachdem, wonach Sie suchen, stehen Ihnen mehrere Optionen zur VerfügungWorkbook.Path
gibt den Pfad einer gespeicherten Arbeitsmappe zurück. Application.Path
gibt den Pfad zur ausführbaren Excel-Datei zurück. CurDir
gibt den aktuellen Arbeitspfad zurück. Dies ist wahrscheinlich der Ordner "Eigene Dateien" oder ähnliches.
Sie können auch die .CurrentDirectory-Eigenschaft des Windows-Scripting-Shell-Objekts verwenden.
Set wshell = CreateObject("WScript.Shell")
Debug.Print wshell.CurrentDirectory
Aber das sollte das gleiche Ergebnis wie gerade bekommen
Debug.Print CurDir
Es ist wahrscheinlich, dass das ActiveWorkbook nicht gespeichert wurde ...
Versuchen Sie stattdessen CurDir()
.
Ihr Code: path = ActiveWorkbook.Path
wird leer zurückgegeben, da Sie Ihre Arbeitsmappe noch nicht gespeichert haben.
Um Ihr Problem zu beheben, kehren Sie zur Excel-Tabelle zurück, speichern Sie die Tabelle und führen Sie den Code erneut aus.
Dieses Mal wird es nicht leer angezeigt, sondern der Pfad, in dem es sich befindet (aktueller Ordner).
Ich hoffe das hat geholfen.
Verwenden Sie Application.ActiveWorkbook.Path
nur für den Pfad selbst (ohne den Arbeitsmappennamen) oder Application.ActiveWorkbook.FullName
für den Pfad mit dem Arbeitsmappennamen.
Dies ist die VBA, die ich verwende, um den aktuellen Pfad zu öffnen in einem Explorer Fenster:
Shell Environ("windir") & "\Explorer.exe """ & CurDir() & "",vbNormalFocus
Microsoft-Dokumentation:
Wenn Sie wirklich reines Arbeitsverzeichnis meinen, sollte dies für Sie passen.
Lösung 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
Wenn nicht, sollte dies ausreichen.
Lösung B:
Dim ThisWorkbookPath As String
ThisWorkbookPath = ThisWorkbook.Path
MsgBox "Working-Directory = " & ThisWorkbookPath