1 (изменено: Dbeer, 2021-03-15 10:37:22)

Тема: СДелать текущей папку на сетевом ресурсе

Приветствую, коллеги.
Вот кусок окна Immediate^

? CurDir()
E:\Мои документы
? ActiveWorkbook.Path
\\SERVER03\E-DOC
ChDir "\\SERVER03\E-DOC"
ChDrive "\\SERVER03\E-DOC"

1. Открываю .xls на сетевом ресурсе.
ActiveWorkbook.Path = \\SERVER03\E-DOC

2. Текущая папка CurDir() =E:\Мои документы

3. Делаю ChDir "\\SERVER03\E-DOC" - нет результата см. п.2
4. ChDrive "\\SERVER03\E-DOC" - ошибка. Он глотает только однобуквенные литералы.

Мне надо работать с сопутствующими файлами, лежащими "рядом" с ActiveWorkbook (в той же папке) - искать их там, переименовывать, лезть в подпапки.

Как сфокусировать файловую систему на "ActiveWorkbook.Path" так, чтобы эта папка стала CurDir?
Заранее благодарен.

2

Re: СДелать текущей папку на сетевом ресурсе

Сам нашел решение, но не нравится:
На компах юзеров сетевой ресурс цепляю сетевым диском по схеме:
net use U: "\\Server03\Папка"
Далее все работает, как хотелось.
Но можно ли без таких реверансов?

3 (изменено: Xameleon, 2021-03-15 23:18:45)

Re: СДелать текущей папку на сетевом ресурсе

Dbeer, не уверен, что это оптимальное решение, но попробуйте так:


Sub Main()
    CreateObject("WScript.Shell").CurrentDirectory = ActiveWorkbook.Path
    Dim strFileName$
    strFileName = Dir(CurDir & "\", vbNormal Or vbHidden Or vbSystem Or vbReadOnly)
    While (strFileName <> "")
        Debug.Print strFileName
        strFileName = Dir()
    Wend
End Sub

либо так


#If VBA7 Then
    Private Declare PtrSafe Function SetCurrentDirectory Lib "kernel32" _
        Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
#Else
    Private Declare Function SetCurrentDirectory Lib "kernel32" _
        Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
#End If

Sub Main()
    SetCurrentDirectory ActiveWorkbook.Path
    Dim strFileName$
    strFileName = Dir(CurDir & "\", vbNormal Or vbHidden Or vbSystem Or vbReadOnly)
    While (strFileName <> "")
        Debug.Print strFileName
        strFileName = Dir()
    Wend
End Sub
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

4

Re: СДелать текущей папку на сетевом ресурсе

Dbeer, это ж не пакетные файлы. Зачем вообще менять текущий каталог?!

Для всего этого:

Dbeer пишет:

Мне надо работать с сопутствующими файлами, лежащими "рядом" с ActiveWorkbook (в той же папке) - искать их там, переименовывать, лезть в подпапки.

смена текущего каталога совершенно не требуется.

5 (изменено: Xameleon, 2021-03-16 01:57:53)

Re: СДелать текущей папку на сетевом ресурсе

alexii, изначально тоже самое подумал. Давно не связывался с VBA, поэтому решил провести эксперимент.
Положил в сетевую папку "\\server\test\" 2 файла - test.xlsm и test.txt
В test.xlsm вставил код


Sub Main()
    Debug.Print CurDir
End Sub

Запустил. Думал, что должен вернуться текущий путь \\server\test\, а возвращается путь до документов в профиле пользователя - "%userprofile%\Documents"
Следовательно и функции работы с файлами видят файлы в папке документов, вместо файлов по пути размещения эксельного файла.
Поэтому я решил предложить сменить каталог теми способами, что выше.

Возможно есть решение лучше ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

6

Re: СДелать текущей папку на сетевом ресурсе

Xameleon
Спасибо за понимание.
ВОт по этим самым граблям я и нагулялся.
Если не менять текущую директорию, закашляешься пути клеить к именам файлов.
Всем спасибо!! Снято!