3
respostas

Código dá erro na parte do "GetAttr"

O código dá erro ao tentar reconhecer se é pasta ou arquivo, se eu comentar essa seção, o código me retorna o nome da pasta que era para ele estar lendo

3 respostas

Oii, Christopher! Tudo bem?

Agradeço por aguardar o nosso retorno.

Para poder te ajudar, poderia, por gentileza, fornecer mais detalhes? Por exemplo, descreva a mensagem de erro que está recebendo, disponibilize o código que está usando. Um print da sua tela no momento do erro também ajudará.

Dessa forma consigo ter a mesma visibilidade que você para encontrar uma solução. Deixo aqui, um guia de como fazer uma pergunta completa no fórum para te auxiliar.

Fico à disposição, até mais!

Option Explicit
Sub LerArquivosDaPasta()
    Dim endereco, arquivo As String
    Dim DestLinha As Integer
    Dim aleatorio As String
    
    
    DestLinha = 3
    
    endereco = Range("B1") & "\"
    
    arquivo = Dir(endereco, vbDirectory)
    
    
    
   Do While arquivo <> vbNullString
        
        If arquivo <> "." And arquivo <> ".." Then
            Range("B" & DestLinha) = arquivo
            ' Verifica se o item é uma pasta
            If (GetAttr(arquivo) And vbDirectory) = vbDirectory Then
                Range("C" & DestLinha) = "Pasta"
            Else
                Range("C" & DestLinha) = "Arquivo"
            End If
            DestLinha = DestLinha + 1
            arquivo = Dir()
        Else
            arquivo = Dir()
        End If
        
            
        
    Loop
    
End Sub

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

OBSERVAÇÃO: Se eu comentar todo o bloco "IF" do "GetAttr" não gera erro e devolve os nomes dos arquivos e pastas

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oii, Christopher!

Obrigada pelo retorno.

Sobre o erro '53 - O arquivo não foi localizado', ele ocorre porque a função GetAttr está tentando acessar um arquivo ou pasta sem o caminho completo. Como sugestão, tente concatenar o caminho base (armazenado na variável endereco) com o nome do arquivo antes de usar a função GetAttr. Segue uma sugestão:

Option Explicit
Sub LerArquivosDaPasta()
Dim endereco, arquivo As String
Dim DestLinha As Integer
Dim caminhoCompleto As String

DestLinha = 3
endereco = Range("B1") & ""
arquivo = Dir(endereco, vbDirectory)

Do While arquivo <> vbNullString
If arquivo <> "." And arquivo <> ".." Then
caminhoCompleto = endereco & arquivo
Range("B" & DestLinha) = arquivo

    ' Verifica se o item é uma pasta  
    If (GetAttr(caminhoCompleto) And vbDirectory) = vbDirectory Then  
        Range("C" & DestLinha) = "Pasta"  
    Else  
        Range("C" & DestLinha) = "Arquivo"  
    End If  

    DestLinha = DestLinha + 1  
End If  
arquivo = Dir()  

A modificação foi adicionar a variável caminhoCompleto para armazenar o caminho completo do arquivo/pasta. Concatenação do endereco com o arquivo antes de passar para o GetAttr.

Faça o teste e observe se funciona como esperado.

Até mais!