Новости:

Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин

Главное меню

Предопределение начальной папки для выбора файла

Автор Dmitry_Cheplya, 11.11.2024, 15:21:30

« назад - далее »

Dmitry_Cheplya

Добрый день!
На сайте есть тема, посвященная работе с диалоговыми окнами выбора папки, выбора файла - там все понятно, но вопрос остался: можно ли при работе с диалоговым окном выбора файла задать начальную папку для поиска, а не использовать папку, использованную в последний раз (так работает Excel по умолчанию)? В Application.GetOpenFilename нужного параметра нет, но ведь Excel как-то помнит, ОТКУДА пользователь в последний раз открывал файл!!!
Откуда задача. Результаты сканирования документов падают в одну сетевую папку и удобно было бы пользователю сразу в нее попадать, чтобы выбрать файл со своим сканом - программа выбранный файл правильно назовет и перенесет файл в нужную папку.

Дмитрий Щербаков(The_Prist)

Цитата: Dmitry_Cheplya от 11.11.2024, 15:21:30В Application.GetOpenFilename нужного параметра нет, но ведь Excel как-то помнит, ОТКУДА пользователь в последний раз открывал файл
Помнит, но только в текущем сеансе - после перезагрузки Excel этот параметр сбрасывается.
И задается он вот как:
ChDrive Left(ThisWorkbook.Path,1)
ChDir ThisWorkbook.Path
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Dmitry_Cheplya

#2
С этой частью разобрались, но все же: как заставить Application.GetOpenFilename открывать обзор проводника с определённой папки? В моем случае: с СЕТЕВОЙ папки (локальные диски - понятно: буква диска, путь и погнали), куда попадают сканы документов.

Дмитрий Щербаков(The_Prist)

Цитата: Dmitry_Cheplya от 11.11.2024, 19:13:33но все же
но все же - данный ответ полностью это решает - применять необходимо обе строки(начала ChDrive, затем ChDir). Другой вопрос, что Вы не уточнили, что диск у Вас не поименован и тогда ChDrive не сработает, т.к. допускает по сути только один символ(первый). Вообще здесь есть нюансы. Но как правило API справляет неплохо:
Private Declare PtrSafe Function SetCurrentDirectoryA Lib "kernel32" (ByVal lpPathName As String) As LongPtr

Sub SetPath()
    Dim sPath$
    Dim retval
   
    sPath = "\\111.123.14.15\Some_Drive" 'or ThisWorkbook.Path
    retval = SetCurrentDirectoryA(sPath)
    If retval = 0 Then
        MsgBox "Ошибка установки пути"
    End If
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Dmitry_Cheplya

Спасибо за ответ.
Возможно не я один нуждаюсь в комментарии по предложенному коду - много нового и не до конца понятного. Если можно, в пару строк комментарий по тому, как это работает

Дмитрий Щербаков(The_Prist)

Цитата: Dmitry_Cheplya от 11.11.2024, 21:38:04много нового
эм...а что именно-то? Единственное новое - это функция API SetCurrentDirectoryA(про функции API можно найти информацию через поисковики - тема далеко не новая).
Все остальное по сути тоже самое, что ChDrive и CHDir - указываем нужный путь. И что там непонятно - мне вообще сложно угадать. Идет просто вызов функции и проверка, что она что-то сделала(это нормальное поведение API функций). Можно и не проверять, если не надо - это лишь пример.

'объявляем функцию задания текущего пути в проводнике
Private Declare PtrSafe Function SetCurrentDirectoryA Lib "kernel32" (ByVal lpPathName As String) As LongPtr

Sub SetPath()
    Dim sPath$
    Dim retval
    'задаем путь к папке, которую хотим сделать текущей
    sPath = "\\111.123.14.15\Some_Drive" 'or ThisWorkbook.Path
    'вызываем API функцию задания текущего пути
    retval = SetCurrentDirectoryA(sPath)
    'если результат не равен 0 - значит путь установлен
    'если 0 - значит произошла ошибка и путь не установлен
    If retval = 0 Then
        MsgBox "Ошибка установки пути"
    End If
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Kuzmich

ЦитироватьВ Application.GetOpenFilename нужного параметра нет
А в
Set FD = Application.FileDialog(msoFileDialogFilePicker)есть параметр
.InitialFileName = ThisWorkbook.Path

Яндекс.Метрика Рейтинг@Mail.ru