Диалог выбора файла

focusНик
Дата: 03.12.2015 11:03:52
Приветствую форумчан!
Для выбора файла использую следующий код:

Sub ShowFileDialog()
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Title = "Выбрать файлы отчетов" 'заголовок окна диалога
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*;*.xla*", 1 'устанавливаем возможность выбора только файлов Excel
        .Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 2 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = "%USERPROFILE%\Desktop\" 'назначаем папку отображения по умолчанию
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If oFD.Show = 0 Then Exit Sub 'показывает диалог
        'цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
          ' код обработки выбраного файла файла
        Next
    End With
End Sub


Вопрос:
Как прописать в коде чтобы открывалась папка из которой добавлялся последний файл.
т.е. пользователь открыл диалог, добавил файл, и понял что нужно добавить еще один, но открывается снова декстоп а не та папка из которой он выбрал 1 файл.
Надеюсь я донес что мне хочется реализовать.
Predeclared
Дата: 03.12.2015 11:11:50
focusНик,
читай комменты в коде до просветления.
focusНик
Дата: 03.12.2015 11:19:03
Predeclared,

Крайне конструктивный совет до *******
Agapov_stas
Дата: 03.12.2015 11:20:39
focusНик, как вариант, использовать глобальную переменную и присваивать ей последнюю открытую директорию.
После чего при открытии диалога:
InitialFileName=MyGlobal
Akina
Дата: 03.12.2015 11:32:23
focusНик
Крайне конструктивный совет

Уточню. До просветления надо читать комментарий к строке
.InitialFileName = "%USERPROFILE%\Desktop\" 'назначаем папку отображения по умолчанию
focusНик
Дата: 03.12.2015 11:46:47
Akina,

Я понимаю что именно это строка отвечает за открываемую папку в диалоге, а вот что туда прописать вместо "%USERPROFILE%\Desktop\"
Akina
Дата: 03.12.2015 11:52:16
После выбора файла следует текущий каталог сохранить в переменной или служебной таблице.
При вызове следует получить каталог из переменной или служебной таблицы и указать именно его. Если переменная или таблица НЕ содержат сохранённого каталога - вот тогда указывается каталог по умолчанию, например, как в коде.

Т.е. будет что-то типа

' ...
if global_var = "" then 
    .InitialFileName = "%USERPROFILE%\Desktop\"
else 
    
end if
' ...
global_var = .InitialFileName
Akina
Дата: 03.12.2015 11:52:58
блин...
' ...
if global_var = "" then 
    .InitialFileName = "%USERPROFILE%\Desktop\"
else 
    .InitialFileName = global_var
end if
' ...
global_var = .InitialFileName
focusНик
Дата: 03.12.2015 11:57:13
Akina,

Спасибо. Именно это я и хотел, просто не допетрил как записать
upack
Дата: 21.12.2020 19:19:28
Доброго времени суток.
Подскажите! как впихнуть сей код, в этот код.
автор
' ...
if global_var = "" then
.InitialFileName = "%USERPROFILE%\Desktop\"
else
.InitialFileName = global_var
end if
' ...
global_var = .InitialFileName


автор
Private Sub путь_DblClick(Cancel As Integer)
Dim dlgOpenFile As Object ' FileDialog
Set dlgOpenFile = Application.FileDialog(3) 'msoFileDialogFolderPicker
With dlgOpenFile
.Filters.Clear
.InitialFileName = "Z:\Чертежи для ЦЕХА\*"
.AllowMultiSelect = False
.Title = "Выбор чертежа"
If (.Show = -1) And (.SelectedItems.Count > 0) Then
Me.путь.Value = .SelectedItems(1)
End If
End With
Set dlgOpenFile = Nothing
End Sub


Пробовал по разному. уже не ругается , но и путь не запоминает