Как показать диалог выбора файлов в Access 2007? - PullRequest
1 голос
/ 13 ноября 2009

Я хочу показать диалоговое окно, в котором пользователь может выбрать файл, нажать «ОК», после чего путь к файлу будет сохранен в базе данных.

У меня только одна проблема, я не могу понять, как показать диалоговое окно. А ты?

Ответы [ 4 ]

1 голос
/ 13 ноября 2009

Аналогично ответу @ dwo: Как отобразить общий диалог открытия файла для выбора файла

Создайте новый модуль и вставьте код в новый модуль.
В приведенной выше ссылке также есть пример того, как его использовать.

1 голос
/ 13 ноября 2009

Вы можете использовать WinAPI для этого. Импорт

Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Вы также должны импортировать структуру OPENFILENAME.

Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

Затем вы заполняете структуру и вызываете GetOpenFileName.

 Dim of As OPENFILENAME

of.lStructSize = Len(of)
of.hwndOwner = Access.hWndAccessApp
of.hInstance = vbNull
of.lpstrFilter = m_strFilter ' *.doc for example
of.nFilterIndex = 1
of.lpstrFile = String(257, 0)
of.nMaxFile = Len(of.lpstrFile) - 1
of.lpstrFileTitle = of.lpstrFile
of.nMaxFileTitle = of.nMaxFile
of.lpstrInitialDir = m_strDirectory ' Folder to start
of.lpstrTitle = m_strTitle ' Title of dialog window
of.Flags = 0

If GetOpenFileName(of) <> 0 Then
    filename = VBString(of.lpstrFile)
end if

Где VBString - вспомогательная функция для преобразования строки с нулевым символом в конце.

Private Function VBString(str As String) As String
   Dim pos As Integer
   pos = InStr(1, str, Chr(0), vbTextCompare)
   VBString = Left(str, pos - 1)
End Function
0 голосов
/ 13 ноября 2009

Этот код сделал это.

0 голосов
/ 13 ноября 2009

Не забывайте, что объект fileDialog, легкий, позволяет использовать множественный выбор, fileOpen, выбор папки и т. Д. Таким образом:

Dim m_fileList As FileDialog, _
    i as long

'my choice here: pick up multiple files. Other options are available'
Set m_fileList = Application.FileDialog(msoFileDialogFilePicker)
m_fileList.AllowMultiSelect = True
m_fileList.InitialFileName = myDefaultFolder
m_fileList.InitialView = msoFileDialogViewDetails
m_fileList.Title = yourTitle
m_fileList.InitialFileName = myDefaultFileName

'we can add a file extension filter serie'
'm_fileList.filters(i) = ...'

If m_fileList.Show = -1 And m_fileList.SelectedItems.Count > 0 Then
    For i = 1 To m_fileList.SelectedItems.Count
        debug.print m_fileList.selectedItems(i).
    Next i
End If
...