none
Listar os Arquivos do Diretorio atual com VBA RRS feed

  • Pergunta

  • Bom dia.

    Gostaria de saber se da para listar numa planilha, os nomes de arquivos que estao no mesmo diretorio,de nomes iniciais predefinidos e duas letras finais aleatorias.Nos antigos sistemas DOS colocavam Dir c:\Fabrica1.2005.02.**.xls (se nao me engano) dai listava os arquivos dos dias existentes(ultimos dois numero e o dia).

    Desde ja agradeco a quem possa ajudar

    Tadao


    sexta-feira, 1 de maio de 2015 05:35

Respostas

  • Tadao, tenta assim:

    Sub Example1()
    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim i As Integer
    
    'Create an instance of the FileSystemObject
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'Get the folder object
    Set objFolder = objFSO.GetFolder("C:\CaminhoParaListar\")
    i = 1
    'loops through each file in the directory and prints their names and path
    For Each objFile In objFolder.files
        If InStr(objFile.Name, "Fabrica1.2005.02.") > 0 Then
        'print file name
        Cells(i + 1, 1) = objFile.Name
        
        
        'print file path
        'Cells(i + 1, 2) = objFile.Path
        i = i + 1
        End If
        
    Next objFile
    End Sub
    

    terça-feira, 12 de maio de 2015 13:27

Todas as Respostas

  • Bom dia Antonio, tudo bom?

    Você pode utilizar a classe System.IO.Directory para realizar operações com os arquivos dentro de um diretório. A classe te permite verificar os arquivos em uma pasta e suas subpastas através do método GetFiles. O código abaixo deveria permitir a você listar os arquivos do tipo que você precisa com os filtros desejados:

    Dim files As String() = Directory.GetFiles( @"C:\CaminhoParaListar", "Fabrica1.2005.02.**.xls", SearchOption.AllDirectories )

    OBS: Eu costumo programar em C#, mas acredito que aversão acima que é meio que o equivalente do que eu faço em C# para o VB deveria funcionar igualmente. De qualquer forma, segue abaixo a documentação da classe Directory que contém exemplos tanto em VB quando em C#:

    Classe System.IO.Directory

    Espero ter ajudado,

    Att

    • Sugerido como Resposta Samuel Pelaquim sexta-feira, 1 de maio de 2015 13:15
    sexta-feira, 1 de maio de 2015 11:13
  • Bom dia Samuel, desculpe pelo atraso do retorno.

    Ainda sou novato na area de programacao em VBA Excel e nao consigo assimilar muitas coisas.

    Para testar a sua sugestao coloquei na linha de programacao como abaixo:

    Sub ListaDiretorio()

    Dim files As String() = Directory.GetFiles( @"C:\CaminhoParaListar", "Fabrica1.2005.02.**.xls", SearchOption.AllDirectories )

    End Sub

    Desculpe o meu pouco conhecimento, ma e assim que devo fazer?

    Tadao

    terça-feira, 12 de maio de 2015 04:39
  • Tadao, tenta assim:

    Sub Example1()
    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim i As Integer
    
    'Create an instance of the FileSystemObject
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'Get the folder object
    Set objFolder = objFSO.GetFolder("C:\CaminhoParaListar\")
    i = 1
    'loops through each file in the directory and prints their names and path
    For Each objFile In objFolder.files
        If InStr(objFile.Name, "Fabrica1.2005.02.") > 0 Then
        'print file name
        Cells(i + 1, 1) = objFile.Name
        
        
        'print file path
        'Cells(i + 1, 2) = objFile.Path
        i = i + 1
        End If
        
    Next objFile
    End Sub
    

    terça-feira, 12 de maio de 2015 13:27
  • Obrigado pelo codigo detalhado, Samuel.

    Estava experimentando a rotina, mas nao acontecia nada.Sem entender muito os varios comandos de alto nivel, ja estava quase desistindo quando notei que talvez esteja faltando a variavel i como abaixo indicado, dai deu certo.

    Porem apesar de no diretorio ter arquivos de final 1 ate 30 a rotina so listou de 1 a 9, e no lugar de 2 listou o 20, apesar de ter o arquivo 2 e 20.

    Tadao

    'codigo original

    If InStr(objFile.Name, "Fabrica1.2005.02.") > 0 Then

    'codigo alterado

    If InStr(objFile.Name, "Fabrica1.2005.02." & i) > 0 Then

    sexta-feira, 15 de maio de 2015 04:57