|
|||||||
Диалоги
Время создания: 31.07.2019 23:18
Текстовые метки: Диалоги, access, FileDialog
Раздел: Разные закладки - VBA - GetOpen
Запись: xintrea/mytetra_db_adgaver_new/master/base/1483965118d2lemcdkga/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Имейте ввиду, что Application.FileDialog в А2007/2010 не работает (или работает не всё). Те примеры диалога, что вы нашли, слишком громоздки и непонятны для начинающих профи. Можно проще: Public Function SelectFileDialogForAccess(Optional fSaveMode As Boolean, _ Optional strInitialDir As String, _ Optional strFilterString As String = "Все файлы (*.*)|Файлы MSAccess (*.mdb;*.mde;*.mda)", _ Optional ByVal fMultiSelect As Boolean, _ Optional ByVal DefSaveFileName As String, _ Optional strTitle As String = "Выбор файла", _ Optional ByVal strButtonName As String) As String 'РАБОТАЕТ ТОЛЬКО В ACCESS! Версия не ниже А2000.
'Открывает диалог выбора файла или нескольких файлов (при fMultiSelect=True).
'Возвращает полный путь к выбранному файлу или строку из полных путей, разделеленных символом vbTab (при fMultiSelect=True).
'Список файлов можно ограничить фильтром в strFilterString (синтаксис должен соответствовать предложенному по умолчанию).
'В strInitialDir можно указать путь к папке, которая будет открыта при вызове диалога.
'При fSaveMode=Труе в диалоге становится доступным поле "Имя файла", где может быть изменено имя выбранного файла.
' При вызове диалога в этом поле отражается текст, указанный в DefSaveFileName, который функция вернет, если не выделять
' другой файл в диалоге (папку можно менять). При этом, если не указано расширение и выбран фильтр по конкретному расширению,
' то оно добавится к имени файла.
'В strTitle и strButtonName можно указать заголовок диалога и наименование кнопки выбора.
Dim ret As Long, strFile As String, intFlags As Integer WizHook.Key = 51488399
If fSaveMode Then strFile = DefSaveFileName & String(255, Chr(0)) fMultiSelect = False ElseIf fMultiSelect Then strFile = String(5000, Chr(0)) intFlags = 12
Else strFile = String(255, Chr(0)) End If
ret = WizHook.GetFileName(Application.hWndAccessApp, "", strTitle, strButtonName, _ strFile, strInitialDir, strFilterString, 0, 0, intFlags, Not fSaveMode)
' Проверим, не произошел ли возврат в результате нажатия клавиши Esc (-302)
If ret <> -302 Then SelectFileDialogForAccess = strFile
End If End Function А вот пример, выводящий выбранные файлы в окне отладки. Вместо Debug.Print можно выполнить DoCmd.TransferText. Sub TestDialog() Dim s$, v, i& s = SelectFileDialogForAccess(, CurrentProject.Path, , True) If Len(s) = 0 Then Exit Sub v = Split(s, vbTab)
For i = LBound(v) To UBound(v) Debug.Print v(i)
Next
End Sub
Public Function SelectFolderDialogForAccess(Optional strInitialDir As String, _ Optional strTitle As String = "Выбор папки", _ Optional ByVal strButtonName As String) As String Dim ret As Long, strFolder As String 'РАБОТАЕТ ТОЛЬКО В ACCESS! Версия не ниже А2000.
'Открывает диалог выбора папки, возвращает полный путь к выбранной папке.
'В strInitialDir можно указать путь к папке, которая будет открыта при вызове диалога.
'В strTitle и strButtonName можно указать заголовок диалога и наименование кнопки выбора.
WizHook.Key = 51488399
strFolder = String(255, Chr(0))
ret = WizHook.GetFileName(Application.hWndAccessApp, "", strTitle, strButtonName, _ strFolder, strInitialDir, "*.*", 0, 0, 32, True)
' Проверим, не произошел ли возврат в результате нажатия клавиши Esc (-302)
If ret <> -302 Then SelectFolderDialogForAccess = strFolder
End If End Function |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|