Как получить текущий рабочий каталог, используя VBA?

40

Я использую MS Excel 2010 и пытаюсь получить текущий каталог, используя приведенный ниже код,

    path = ActiveWorkbook.Path

Но ActiveWorkbook.Path возвращает пустое.

  • 2
    Если файл еще не был сохранен, пути для возврата нет. Что вы подразумеваете под "текущим" каталогом? Если вы просто хотите текущий каталог по умолчанию, вы можете использовать CurDir()
Теги:
excel

6 ответов

61
Лучший ответ

Я тестировал это:

Когда я открываю документ Excel D:\db\tmp\test1.xlsm:

  • CurDir() возвращает C:\Users\[username]\Documents

  • ActiveWorkbook.Path возвращает D:\db\tmp

Итак, CurDir() имеет системную настройку и может быть изменен.

ActiveWorkbook.Path не изменяется для одной и той же сохраненной рабочей книги.

Например, CurDir() изменяется, когда вы выполняете команду "Файл/Сохранить как" и выбираете случайный каталог в диалоговом окне выбора файла/каталога. Затем нажмите "Отмена", чтобы пропустить сохранение. Но CurDir() уже изменился на последний выбранный каталог.

  • 0
    Когда вы используете Workbooks.Open("file.xls") (без указания пути), подразумевается ли CurDir() в качестве пути?
  • 3
    Для разработчиков, использующих MS Access: Application.CurrentProject.Path
8

У вас есть несколько вариантов в зависимости от того, что вы ищете. Workbook.Path возвращает путь к сохраненной книге. Application.Path возвращает путь к исполняемому файлу Excel. CurDir возвращает текущий рабочий путь, вероятно, по умолчанию используется папка "Мои документы" или аналогичная.

Вы также можете использовать свойство оболочки оболочки сценариев .CurrentDirectory.

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

Но это должно получить тот же результат, что и просто

Debug.Print CurDir
7

Казалось бы, что ActiveWorkbook не был сохранен...

Попробуйте CurDir().

  • 0
    CurDir () возвращает каталог профиля пользователя
  • 0
    Это обычно правильно, если Excel не был открыт с явно установленным альтернативным рабочим каталогом. Если активная рабочая книга не была сохранена, то вам решать, где ее сохранить.
3

Ваш код: path = ActiveWorkbook.Path

возвращает пустое значение, так как вы еще не сохранили свою книгу.

Чтобы решить проблему, вернитесь к листу Excel, сохраните свой листок и снова запустите свой код.

На этот раз он не будет отображаться пустым, но покажет вам путь, где он находится (текущая папка)

Я надеюсь, что это помогло.

0

Используйте Application.ActiveWorkbook.Path только для самого пути (без имени книги) или Application.ActiveWorkbook.FullName для пути с именем книги.

-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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню