Selecionar uma lista de arquivos (ou um só) com o aplicativo GetOpenFileName. Uma função simplificada que utilize o explorador Windows. Este código funciona igualmente em VBA com a condição de adaptar os controles.
Você pode modificar
- O título
- O retorno de um só arquivo tirando a constante OFN_ALLOWMULTISELECT
- Explorador da antiga versão tirando a constante OFN_EXPLORER
O código
'*********************************
'Autor -> Lermite222
'Seleção de uma lista de arquivos
'com o explorador Windows
'Versão 1
'29/01/2012
'*********************************
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
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
Public Enum LnFlags
OFN_ALLOWMULTISELECT = &H200
OFN_CREATEPROMPT = &H2000
OFN_ENABLEHOOK = &H20
OFN_ENABLETEMPLATE = &H40
OFN_ENABLETEMPLATEHANDLE = &H80
OFN_EXPLORER = &H80000
OFN_EXTENSIONDIFFERENT = &H400
OFN_FILEMUSTEXIST = &H1000
OFN_HIDEREADONLY = &H4
OFN_LONGNAMES = &H200000
OFN_NOCHANGEDIR = &H8
OFN_NODEREFERENCELINKS = &H100000
OFN_NOLONGNAMES = &H40000
OFN_NONETWORKBUTTON = &H20000
OFN_NOREADONLYRETURN = &H8000
OFN_NOTESTFILECREATE = &H10000
OFN_NOVALIDATE = &H100
OFN_OVERWRITEPROMPT = &H2
OFN_PATHMUSTEXIST = &H800
OFN_READONLY = &H1
OFN_SHAREAWARE = &H4000
OFN_SHOWHELP = &H10
End Enum
Private Sub Command1_Click()
Dim Retorno As String, i As Integer
Dim TB
Retorno = ListaArquivo()
If Retorno = "" Then Exit Sub 'O usuário anula
TB = Split(Retorno, vbNulChar) ' Separação da lista se ela existir
If UBound(TB) = 0 Then 'selecionar um só arquivo
For i = Len(TB(0)) To 1 Step -1
If Mid(TB(0), i, 1) = "" Then Exit For
Next
List1.AddItem Mid(TB(0), i + 1)
TB(0) = Left(TB(0), i)
Else 'Uma lista está disponível
For i = 1 To UBound(TB)
List1.AddItem TB(i)
Next
End If
Label1.Caption = TB(0)
End Sub
Private Sub Command2_Click()
List1.Clear
Label1 = ""
End Sub
Função ListasArquivo() As String
Dim Ret As Long
Dim LN_Ouv As OPENFILENAME
LN_Ouv.lStructSize = Len(LN_Ouv)
LN_Ouv.hWndOwner = Me.hWnd
LN_Ouv.hInstance = App.hInstance
LN_Ouv.lpstrFilter = "Musica (*.mp3)" + Chr$(0) + "*.mp3" + Chr$(0) + "Todos (*.*)" + Chr$(0) + "*.*" + Chr$(0)
LN_Ouv.lpstrFile = String$(1024, vbNullChar)
LN_Ouv.nMaxFile = Len(LN_Ouv.lpstrFile) - 1 ' Comprimento máximo de seleção de arquivos.
LN_Ouv.lpstrTitle = "Seleção lista de arquivo" ' Título do explorador
' diretiva para a exibição.
LN_Ouv.flags = OFN_ALLOWMULTISELECT + OFN_EXPLORER
' Exibição do explorador
Ret = GetOpenFileName(LN_Ouv)
If Ret = 0 Then
ListaArquivo = ""
Else
ListaArquivo = Left$(LN_Ouv.lpstrFile, InStr(1, LN_Ouv.lpstrFile, vbNullChar & vbNullChar) - 2)
End If
End Function
Download
Você pode baixar o projeto na Lista de arquivos .zipNão esqueça de descompacta-lo.
Tradução feita por Ana Spadari
Fonte: Kioskea.
0 comentários:
Os comentários serão moderados antes de publicar! respondo todos, obrigado por comentar.