如何使用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