Notifications
Clear all

Abrir arquivos de Excel e procurar por código

14 Posts
3 Usuários
0 Reactions
2,210 Visualizações
(@felipen_)
Posts: 0
New Member
Topic starter
 

Pessoal, bom dia!

Preciso construir um programa que abra vários arquivos em Excel que estão em uma pasta na rede e localize um código para mim, por exemplo 3021999. O código procurado estará sempre na coluna A. Depois que o programa encontrar em qual planilha está, preciso que retorne com uma mensagem com o nome do arquivo onde se encontra o código.

A lógica seria essa:

1) Abrir arquivo por arquivo .xlsx que está dentro de uma pasta.
2) Localizar o código X que eu inserir em algum campo.
3) A macro efetuar a busca.
4) Fechar os arquivos.
5) O Excel retornar com uma mensagem: "O código X está no arquivo XYZ".

Tem como fazer isso via macro?

Obrigado a todos!

 
Postado : 03/07/2018 5:04 am
(@klarc28)
Posts: 0
New Member
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

felipen_,

Bom dia!

A lógica para o que você quer fazer é a mesma da rotina AbrirArquivo que lhe enviei no outro tópico que resolvi para você. Basta você adaptar para percorrer cada linha da coluna A de cada arquivo aberto, à procura do código desejado.

 
Postado : 03/07/2018 6:24 am
(@klarc28)
Posts: 0
New Member
 

Tenho um exemplo de código que percorre linhas em busca de código:

Option Explicit

Sub retiraraspas()

On Error GoTo fim

Dim dt As String
Dim nome As String
Dim linha As Long
Dim linha2 As Long

dt = Replace(Date, "/", "", 1)

nome = "Plan_" & dt
linha = 1

While Sheets("Plan1").Range("A" & linha).Value <> ""
linha2 = 1
While Sheets(nome).Range("A" & linha2).Value <> ""

If Sheets("Plan1").Range("A" & linha).Value = Sheets(nome).Range("A" & linha2).Value Then
Sheets("Plan1").Range("B" & linha).Value = Sheets(nome).Range("B" & linha2).Value

End If

linha2 = linha2 + 1
Wend

linha = linha + 1
Wend
fim:
End Sub
 
Postado : 03/07/2018 6:29 am
(@felipen_)
Posts: 0
New Member
Topic starter
 

Wagner, boa tarde!

Entendi, imaginava que seria algo relacionado a lógica de abrir arquivos. Desculpe mas sou leigo no assunto, você poderia montar algo bem simples utilizando aquela macro onde eu consiga fazer esta busca?

Inserir um arquivo anexo com um layout do que preciso. Se possível, gostaria de inserir mais de um código na tabela principal ("arquivo Macro para buscar códigos"), e o Excel retornar na segunda coluna o nome do arquivo .xlsx onde se encontra o código. Lembrando que em todos os arquivos que serão abertos, o código sempre estará na coluna A.

Se puder me ajudar, agradeço!

Obrigado!

 
Postado : 03/07/2018 10:16 am
(@klarc28)
Posts: 0
New Member
 

Eu até poderia ajudar, pois percorrer linhas é uma coisa bem basiquinha, mas, no primeiro clique no botão já deu um erro sobre uma planilha que não existe no arquivo. Creio que o Wagner está mais informado sobre o projeto.

 
Postado : 03/07/2018 1:02 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

felipen_ ,

Boa noite!

Assim.

 
Postado : 03/07/2018 8:51 pm
(@felipen_)
Posts: 0
New Member
Topic starter
 

Wagner, bom dia!

Excelente! Funcionou perfeitamente.

A lógica não era essa que eu pensei, pois dessa forma só consigo buscar um código por vez, correto?

A minha intenção era digitar um ou mais códigos na coluna A, clicar no botão "BUSCAR CÓDIGOS" e o Excel trazer o nome do arquivo onde se encontra na coluna B. Tem como fazer isso?

Desde já, muito obrigado!

 
Postado : 04/07/2018 4:52 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Ok, entendi. Da pra fazer sim. Mas tarde, quando tiver um tempo, tentarei fazer dessa forma. De qualquer modo, você também só conseguirá puxar a informação de um código por vez. A macro deve ser disparada sempre que entrar com o código na coluna A? Se for assim, só pode ser um por vez.

Agora, se você quiser primeiramente digitar todos os código na coluna A e depois pressionar um botão que vá buscar a informação nos arquivos e preencha a coluna B de cada código da coluna A, aí tudo bem. Poderá consultar vários códigos por vez. Diga qual é a lógica que pretende usar.

 
Postado : 04/07/2018 10:43 am
(@felipen_)
Posts: 0
New Member
Topic starter
 

Wagner, boa tarde!

A lógica que quero utilizar é a segunda citada por você.

Digitar UM OU MAIS códigos na coluna A e o Excel retornar o nome dos arquivos na coluna B.

Só fazendo um adendo: nesse caso, a lógica pode funcionar independentemente do nome do arquivo estar como FINALIZADO ou não, bastando ser um arquivo .xlsx, ou seja, quero procurar o código em todos os arquivos.

Fui fazer um teste aqui com vários arquivos ao mesmo tempo, e apareceu o erro da imagem, veja no anexo...

Mais uma pergunta: se eu for utilizar essa Macro na rede da empresa, em qual local da lógica devo alterar o caminho para execução?

 
Postado : 04/07/2018 12:20 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

felipen_

Boa noite!

Segue nova versão. Código comentado com relação a mudança para utilizar o caminho na rede.

 
Postado : 04/07/2018 5:38 pm
(@felipen_)
Posts: 0
New Member
Topic starter
 

Wagner, boa tarde!

Está funcionando perfeitamente. Agradeço a ajuda.

Porém ainda estou com aquela problema de ter que incluir uma função de Sendkeys na lógica, pois alguns arquivos que eu abro, o Excel me traz 3 avisos, o primeiro para habilitar conteúdo, onde tenho que clicar em Habilitar conteúdo, o segundo é clicar em Atualizar numa caixa de diálogo onde ele diz que a pasta de trabalho contém vínculos, e depois que clico em Atualizar, ele me traz outra caixa de mensagem pedindo para clicar em Continuar ou em Editar vínculos.

Na minha visão tenho duas soluções:

Ou acrescentamos algo na programação que faça pular estas etapas destes 3 avisos (habilitar conteúdo, atualizar e continuar) ou configurarmos algum parâmetro no Excel para que ele pare de exibir estas mensagens.

Pode me ajudar com alguma das duas?

 
Postado : 05/07/2018 6:28 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Infelizmente, não sei resolver esse tipo de problema pois acredito que o sendkeys não resolve isso.

 
Postado : 06/07/2018 2:44 pm
(@klarc28)
Posts: 0
New Member
 

Creio que você pode usar algo parecido com o código abaixo:

sub chamartodasasmacros (  )
Application.DisplayAlerts = False
call macro1
call macro2
call macro3
Application.DisplayAlerts = True
end sub

https://msdn.microsoft.com/pt-br/vba/excel-vba/articles/application-displayalerts-property-excel

 
Postado : 10/07/2018 9:23 am