Declare Function GetOpenFileName Lib "comdlg32" Alias "GetOpenFileNameA" ( _ pOPENFILENAME As OPENFILENAME) As Long
GetOpenFileName открывает стандартное общее диалоговое окнo открытия файла. Функция не открывает файлы, а только открывает диалоговое окно и возвращает имя файла (файлов).
Функция возвращает 0 в случае ошибки или если была нажата кнопка Отмена, в успешном случае возвращается 1.
Dim OpenFile As OPENFILENAME Dim lRet As Long Dim sFilter As String Dim errcode As Long OpenFile.lStructSize = Len(OpenFile) OpenFile.hwndOwner = Form1.hWnd OpenFile.hInstance = App.hInstance sFilter = "Текстовые файлы (*.txt)" & Chr(0) & "*.TXT" & Chr(0) OpenFile.lpstrFilter = sFilter OpenFile.nFilterIndex = 1 OpenFile.lpstrFile = String(257, 0) OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1 OpenFile.lpstrFileTitle = OpenFile.lpstrFile OpenFile.nMaxFileTitle = OpenFile.nMaxFile OpenFile.lpstrInitialDir = "C:\" OpenFile.lpstrTitle = "Ищем текстовые файлы" OpenFile.flags = 0 lRet = GetOpenFileName(OpenFile) If lRet = 0 Then ' это происходит в двух случаях ' или нажата кнопка Отмена ' или произошла ошибка. ' Например, установите слишком маленький буфер OpenFile.lpstrFile = String(2, 0) ' чтобы увидеть ошибку ' MsgBox "Вы нажали кнопку Отмена" 'если нажата Отмена errcode = CommDlgExtendedError() ' получаем код ошибки для GetOpenFileName If errcode = FNERR_BUFFERTOOSMALL Then Debug.Print "Буфер слишком маленький, чтобы содержать имя файла" End If Else MsgBox "Вы выбрали " & Trim(OpenFile.lpstrFile) End If