Arquivo da tag: Lista

Excel – Listar arquivos em diretório num ListBox

Acho que desenterrei essa. Mas o que seria da vida sem um pouco de saudosismo? Como idade não define utilidade, aí vai mais um código que pode servir de ajudar para aquele seu aplicativo bacana em Excel VBA. A ideia é ter acesso fácil a lista de arquivos de um determinado diretório. De aí em diante, as possibilidades são inúmeras. O form não poderia ser mais simples:

For Lista Arquivos Diretório
For Lista Arquivos Diretório

O código do botão ListarArquivos:

Private Sub cmdListaArquivos_Click()
    lstArquivos.Clear
    Dim arquivos() As String
    Dim lCtr As Long
    arquivos = ListaArquivos(txtCaminho.Text)
    For lCtr = 0 To UBound(arquivos)
      lstArquivos.AddItem arquivos(lCtr)
    Next
End Sub

E por fim, o código que faz o trabalho:

Option Explicit
 
Public Function ListaArquivos(ByVal Caminho As String) As String()
 
'Atenção: Faça referência à biblioteca Micrsoft Scripting Runtime
Dim FSO As New FileSystemObject
Dim result() As String
Dim Pasta As Folder
Dim Arquivo As File
Dim Indice As Long
 
ReDim result(0) As String
If FSO.FolderExists(Caminho) Then
    Set Pasta = FSO.GetFolder(Caminho)
 
    For Each Arquivo In Pasta.Files
      Indice = IIf(result(0) = "", 0, Indice + 1)
      ReDim Preserve result(Indice) As String
      result(Indice) = Arquivo.Name
    Next
End If
 
ListaArquivos = result
ErrHandler:
    Set FSO = Nothing
    Set Pasta = Nothing
    Set Arquivo = Nothing
End Function
 
Public Sub AbreForm()
    UserForm1.Show
End Sub
 
Public Sub VerCodigo()
    Application.Goto Reference:="AbreForm"
End Sub

Pressionado o botão Listar Arquivos em uma pasta do seu computador, temos algo parecido com isso:

For Lista Arquivos Diretório Preenchido
For Lista Arquivos Diretório Preenchido

Download do arquivo:

ListaArquivosDiretorio.zip
(10.67 KiB)

Bom proveito!

VBA – Como Filtrar dados no ListBox

VBA - Como Filtrar dados no ListBox

Este é um código de exemplo que tenho a muito tempo, mas como o pessoal tem pedido muito, vou deixá-lo em uma forma mais visível.

Como o VBA carece de controles de apresentação de dados mais avançados, como Grids e Listas complexas, acabamos apelando para o controle ListBox para apresentação de dados vindos de ResultSets (particularmente, prefiro apresentar os dados em uma planilha). Bom, como os dados já estão na LisBox, porque não aplicar o filtro nele mesmo?

Para ver um exemplo, proceda da seguinte forma:

  • Em um novo arquivo, crie uma lista de dados na Plan1, na coluna A a partir da célula A1
  • Abra o VBA (Alt+F11)
  • Adicione um UserForm ao projeto
  • No UserForm, adicione um controle TextBox e um ListBox (mantenha os nomes padrão dos controles)
  • Cliquem em F7 para exibir o código e adicione o seguinte:
  • Option Explicit
    'Autor: Tomás Vásquez.
    '       www.tomasvasquez.com.br/blog
    '       www.tomasvasquez.com.br/forum
    '       www.tomasvasquez.com.br/cursocsharp
    'Data:  15 de Janeiro de 2007.
    'Versão: 1.00 - Em VBA Microsoft Excel 2003 e 2007
    Private TextoDigitado As String
     
    Private Sub TextBox1_Change()
        TextoDigitado = TextBox1.Text
        Call PreencheLista
    End Sub
     
    Private Sub UserForm_Initialize()
        Call PreencheLista
    End Sub
     
    Private Sub PreencheLista()
        Dim ws As Worksheet
        Dim i As Integer
        Dim TextoCelula As String
        Set ws = ThisWorkbook.Worksheets(1)
        i = 1
        ListBox1.Clear
        With ws
            While .Cells(i, 1).Value <> Empty
                TextoCelula = .Cells(i, 1).Value
                If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then
                    ListBox1.AddItem .Cells(i, 1)
                End If
                i = i + 1
            Wend
        End With
    End Sub

Execute o UserForm e digite valores válidos de filtro no TextBox e veja o efeito.

Trocando em miúdos, primeiro o UserForm carrega os dados da Plan1 no ListBox. Depois, o evento TextChange é mapeado para que toda digitação provoque a refiltragem dos dados. A forma de comparação é simples, mas poderia ter sido feita também com o operador Like.

Download do arquivo

http://www.tomasvasquez.com.br/forum/download/file.php?id=2142