68

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

    path = ActiveWorkbook.Path

但 ActiveWorkbook.Path 返回空白。

4

9 回答 9

116

我已经对此进行了测试:

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

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

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

所以CurDir()有一个系统默认值,可以更改。

ActiveWorkbook.Path对于同一个保存的工作簿不会更改。

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

于 2013-11-06T22:47:31.623 回答
12

根据您要查找的内容,您有多种选择。 Workbook.Path返回已保存工作簿的路径。Application.Path返回 Excel 可执行文件的路径。CurDir返回当前工作路径,这可能默认为您的 My Documents 文件夹或类似文件夹。

您还可以使用 Windows 脚本外壳对象的 .CurrentDirectory 属性。

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

但这应该得到与刚才相同的结果

Debug.Print CurDir
于 2013-11-06T22:35:37.973 回答
8

ActiveWorkbook 似乎没有保存...

试试CurDir()吧。

于 2013-11-06T22:35:13.393 回答
5

你的代码:path = ActiveWorkbook.Path

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

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

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

我希望这有帮助。

于 2016-06-12T15:09:32.823 回答
2

仅用于Application.ActiveWorkbook.Path路径本身(不带工作簿名称)或Application.ActiveWorkbook.FullName用于具有工作簿名称的路径。

于 2015-11-09T08:06:58.597 回答
1

这是我用来在资源管理器窗口中打开当前路径的 VBA:

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

微软文档

于 2018-11-18T07:55:31.203 回答
1

如果您真的是指纯粹的工作目录,那么这应该适合您。

解决方案 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 
于 2018-11-27T04:45:37.953 回答
-2

下面的简单示例:

Sub openPath()
Dim path As String
path = Application.ActivePresentation.path
Shell Environ("windir") & "\explorer.exe """ & path & "", vbNormalFocus
End Sub
于 2021-02-09T10:46:50.110 回答
-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
于 2014-12-01T08:44:52.570 回答