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