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

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

path = ActiveWorkbook.Path 

但ActiveWorkbook.Path返回空白。

我testing过这个:

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

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

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

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

ActiveWorkbook.Path不会更改为相同的已保存的工作簿。

例如,当您执行“文件/另存为”命令时, CurDir()更改,并在文件/目录select对话框中select一个随机目录。 然后点击取消跳过保存。 但CurDir()已经改变到最后select的目录。

你有几个select取决于你在找什么。 Workbook.Path返回保存的工作簿的path。 Application.Path返回Excel可执行文件的path。 CurDir返回当前的工作path,这可能默认为您的我的文档文件夹或类似的。

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

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

但是,这应该得到同样的结果

 Debug.Print CurDir 

ActiveWorkbook似乎可能还没有被保存…

尝试CurDir()来代替。

您的代码: path = ActiveWorkbook.Path

由于尚未保存工作簿,因此返回空白。

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

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

我希望有所帮助。

对于具有工作簿名称的path,只使用Application.ActiveWorkbook.Path作为path本身(不带工作簿名称)或Application.ActiveWorkbook.FullName

使用这些代码,并享受它。

 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