如何使用vba获取当前工作目录?

时间:2013-11-06 22:26:48

标签: excel vba

我正在使用MS Excel 2010并尝试使用以下代码获取当前目录

    path = ActiveWorkbook.Path

但ActiveWorkbook.Path返回空白。

9 个答案:

答案 0 :(得分:83)

我测试了这个:

当我打开Excel文档时D:\db\tmp\test1.xlsm

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

  • ActiveWorkbook.Path返回D:\db\tmp

因此CurDir()具有系统默认值,可以更改。

对于同一保存的工作簿,

ActiveWorkbook.Path不会更改。

例如,当您执行“文件/另存为”命令时,CurDir()会更改,并在“文件/目录选择”对话框中选择一个随机目录。然后单击“取消”以跳过保存。但CurDir()已更改为上次选择的目录。

答案 1 :(得分:8)

根据您的需求,您有多种选择。 Workbook.Path返回已保存工作簿的路径。 Application.Path返回Excel可执行文件的路径。 CurDir返回当前工作路径,这可能默认为“我的文档”文件夹或类似文件。

您还可以使用windows脚本shell对象的.CurrentDirectory属性。

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

但是这应该得到与

相同的结果
Debug.Print CurDir

答案 2 :(得分:7)

似乎ActiveWorkbook可能尚未保存......

请尝试CurDir()

答案 3 :(得分:4)

您的代码:path = ActiveWorkbook.Path

返回空白,因为您尚未保存工作簿。

要解决您的问题,请返回Excel工作表,保存工作表,然后重新运行代码。

这次它不显示空白,但会显示它所在的路径(当前文件夹)

我希望有所帮助。

答案 4 :(得分:1)

仅将Application.ActiveWorkbook.Path用于路径本身(不包含工作簿名称)或Application.ActiveWorkbook.FullName用于包含工作簿名称的路径。

答案 5 :(得分:0)

这是我用来在 Explorer 窗口中打开当前路径的VBA:

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

Microsoft文档

答案 6 :(得分:0)

如果您的意思是纯粹的工作目录,那么它应该适合您。

解决方案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

但如果不这样做,就足够了。

解决方案B:

Dim ThisWorkbookPath As String

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

答案 7 :(得分:-2)

以下简单示例:

Sub openPath()
Dim path As String
path = Application.ActivePresentation.path
Shell Environ("windir") & "\explorer.exe """ & path & "", vbNormalFocus
End Sub

答案 8 :(得分:-3)

使用这些代码并享受它。

Public Function GetDirectoryName(ByVal source As String) As String()
Dim fso, oFolder, oSubfolder, oFile, queue As Collection
Set fso = CreateObject("Scripting.FileSystemObject")
Set queue = New Collection

Dim source_file() As String
Dim i As Integer        

queue.Add fso.GetFolder(source) 'obviously replace

Do While queue.Count > 0
    Set oFolder = queue(1)
    queue.Remove 1 'dequeue
    '...insert any folder processing code here...
    For Each oSubfolder In oFolder.SubFolders
        queue.Add oSubfolder 'enqueue
    Next oSubfolder
    For Each oFile In oFolder.Files
        '...insert any file processing code here...
        'Debug.Print oFile
        i = i + 1
        ReDim Preserve source_file(i)
        source_file(i) = oFile
    Next oFile
Loop
GetDirectoryName = source_file
End Function

在这里你可以调用函数:

Sub test()
Dim s
For Each s In GetDirectoryName("C:\New folder")
Debug.Print s
Next
End Sub