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

vi4fp9gy  于 2023-02-25  发布在  其他
关注(0)|答案(9)|浏览(842)

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

path = ActiveWorkbook.Path

但是ActiveWorkbook.Path返回空白。

yftpprvb

yftpprvb1#

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

  • CurDir()返回C:\Users\[username]\Documents
  • ActiveWorkbook.Path返回D:\db\tmp

因此CurDir()有一个系统默认值,可以更改。
ActiveWorkbook.Path不会因同一个保存的工作簿而改变。
例如,当您执行"文件/另存为"命令并在文件/目录选择对话框中选择一个随机目录时,CurDir()会发生变化。然后单击取消跳过保存。但CurDir()已经更改为上次选择的目录。

[ADD]恢复不同应用程序的VBA

    • 访问**D:\db\tmp\test1.accdb,如duckboy81评论:
  1. CurDir()=〉C:\用户[用户名]\文档
    1.应用程序.当前项目.路径=〉D:\db\tmp
    • 电子表格**文件编号:\db\tmp\test1.xlsm
  1. CurDir()=〉C:\用户[用户名]\文档
    1.活动工作簿。路径=〉D:\db\tmp
    1.应用程序。默认文件路径=〉C:\用户[用户名]\文档
    • 展望**:

1.当前目录()=〉C:\窗口\系统32
1.应用程序。会话。存储(1)。文件路径=〉D:\程序数据\Outlook\myOutlookDocX.pst

    • 幻灯片**文件夹:\db\tmp\test1.ppt:
  1. CurDir()=〉C:\用户[用户名]\文档
    1.活动演示。路径=〉D:\db\tmp
    • 字**D:\db\tmp\test1.docx:
  1. CurDir()=〉C:\用户[用户名]\文档
    1.应用程序. ActiveDocument.路径=〉D:\db\tmp
    1.应用程序.活动文档.全名=〉D:\db\tmp\test1.docx
    1.应用程序. StartupPath =〉C:\用户[用户名]\应用程序数据\漫游\microsoft\word\启动
uajslkp6

uajslkp62#

根据您要查找的内容,您有几个选项。Workbook.Path返回已保存工作簿的路径。Application.Path返回Excel可执行文件的路径。CurDir返回当前工作路径,这可能默认为“我的文档”文件夹或类似文件夹。
还可以使用windows脚本 shell 程序对象的.CurrentDirectory属性。

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

但这应该会得到和刚才一样的结果

Debug.Print CurDir
rfbsl7qr

rfbsl7qr3#

可能是ActiveWorkbook尚未保存...
请尝试CurDir()

dly7yett

dly7yett4#

验证码:path = ActiveWorkbook.Path
返回空白,因为您尚未保存工作簿。
若要解决问题,请返回Excel工作表,保存工作表,然后再次运行代码。
这一次它不会显示空白,但会显示它所在的路径(当前文件夹)
希望能帮上忙。

kyvafyod

kyvafyod5#

仅对路径本身(不带工作簿名称)使用Application.ActiveWorkbook.Path,或对带工作簿名称的路径使用Application.ActiveWorkbook.FullName

9jyewag0

9jyewag06#

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

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

微软文档

holgip5t

holgip5t7#

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

    • 溶液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
ykejflvf

ykejflvf8#

简单示例如下:

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

wkftcu5l9#

使用这些代码并享受它。

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

相关问题