wake-up-neo.net

Wie bekomme ich ein aktuelles Arbeitsverzeichnis mit vba?

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.

48
Ullan

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.

81
jacouh

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
8
AndASM

Es ist wahrscheinlich, dass das ActiveWorkbook nicht gespeichert wurde ...

Versuchen Sie stattdessen CurDir().

7
Monty Wild

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.

4
Mohamed Tahir

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

0
ashleedawg

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 
0
NOTSermsak