Meus amigos, bom dia!
Abaixo disponibilizo um código envolvendo API do Windows
que serve para abrir a caixa de dialogo de pesquisa de arquivos.
Eu uso esse código em alguns aplicativos, em outros, uso apenas o
Application.FileDialog , esse útimo já
está nativamente no VBA e é muito simples. No help do Access tem exemplos
e muitos detahes de seu uso. Mas quase não é usado.
Minha dúvida está em saber quais asdifernças entre o uso dos dois. Pois
o Application.FileDialog é muito simples de
se usar e é nativamente incorporado ao VBA, mas é pouco usado, já o código abaixo, é enorme,
complexo, mas também muito funcional e muito usado.
Será que terei problemas posteriores em usar Application.FileDialog ? pois
até agora não tive problema algum!
Segue o código que a maioria usa:
Abaixo disponibilizo um código envolvendo API do Windows
que serve para abrir a caixa de dialogo de pesquisa de arquivos.
Eu uso esse código em alguns aplicativos, em outros, uso apenas o
Application.FileDialog , esse útimo já
está nativamente no VBA e é muito simples. No help do Access tem exemplos
e muitos detahes de seu uso. Mas quase não é usado.
Minha dúvida está em saber quais asdifernças entre o uso dos dois. Pois
o Application.FileDialog é muito simples de
se usar e é nativamente incorporado ao VBA, mas é pouco usado, já o código abaixo, é enorme,
complexo, mas também muito funcional e muito usado.
Será que terei problemas posteriores em usar Application.FileDialog ? pois
até agora não tive problema algum!
Segue o código que a maioria usa:
- Código:
Public Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustomFilter 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
Public Const OFN_FILEMUSTEXIST = &H1000
Public Const OFN_HIDEREADONLY = &H4
Public Const OFN_PATHMUSTEXIST = &H800
Const cTAMANHO = 11
Public Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (lpofn As OPENFILENAME) As Long
Public Declare Function GetPrivateProfileString Lib "Kernel32" Alias _
"GetPrivateProfileStringA" (ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, _
ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Declare Function WritePrivateProfileString Lib "Kernel32" Alias _
"WritePrivateProfileStringA" (ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Public Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Public Function Buscar(lngHwnd As Long, strTítulo As String, strPastaInicial As String, strFiltro As String) As String
Dim filebox As OPENFILENAME
Dim Result As Long
With filebox
.lStructSize = Len(filebox)
.hwndOwner = lngHwnd
.hInstance = 0
.lpstrFilter = strFiltro & vbNullChar & _
"Todos os Arquivos (*.*)" & vbNullChar & "*.*" & vbNullChar & vbNullChar
.nMaxCustomFilter = 0
.nFilterIndex = 1
.lpstrFile = Space(256) & vbNullChar
.nMaxFile = Len(.lpstrFile)
.lpstrFileTitle = Space(256) & vbNullChar
.nMaxFileTitle = Len(.lpstrFileTitle)
.lpstrInitialDir = strPastaInicial & vbNullChar
.lpstrTitle = strTítulo & vbNullChar
.flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY
.nFileOffset = 0
.nFileExtension = 0
.lCustData = 0
.lpfnHook = 0
End With
Result = GetOpenFileName(filebox)
If Result <> 0 Then
Buscar = Left(filebox.lpstrFile, InStr(filebox.lpstrFile, vbNullChar) - 1)
Else
Buscar = ""
End If
End Function