Situação Problema…
Estava eu no escritório, quando fui criar uma rotina de automatização de um processo comercial, onde teria de gerar prévias de vendas a cada duas horas, a questão era que a única base que tinha vinha em um .ZIP que era gerado pelo ORACLE SIEBEL e enviado em meu e-mail… Nem imaginava eu que teria de atualizar a importação salva no access através do excel com vba…
Fiz toda a rotina para fazer a leitura do meus emails com VBA e quando recebesse o e-mail do SIEBEL a rotina salvava o anexo em uma pasta expecifica, com o VBA ele descompactava o arquivo que foi salvo do e-mail, renomeava ele e depois teria alguns tratamentos…
O grande “X” da questão é que quando subia estes dados do .TXT no Excel, importando os dados, todos os dados vinham com muitas colunas erradas, justamente por causa da regra de tabulação, onde faltavam algumas marcações que estragavam tudo…
Solução…
Sendo sincero, foi frustrante, mas pensei, pensei e pensei, e então resolvi partir para uma solução caseira (Me desculpem os apaixonados e defensores, não tenho intenção de ofender ou marginalizar a ferramenta), mas resolvi usar o ACCESS…
Hoje em dia em minhas rotinas não uso mais o Access, pois em muitas delas devido ao grande quantidade de volumes de dados, milhares e milhões de linhas, a ferramenta não suportaria, sem contar com inumeros outros motivos que só quem já trabalhou com o Access e também com o SQL sabe dizer, além de ter outras ferramentas como PowerQuery e até mesmo o Power Bi que podem ajudar muito…
Motivo da escolha…
Maaas, mesmo não sendo a minha primeira opção tive de recorrer ao mesmo pois precisava de uma coisa simples, prática, rápida e que não desse trabalho e que pudesse rodar com o VBA.
Foi quando fiz todo o meu processo e em uma etapa dele precisei Atualizar importação salva no access através do excel com vba, aquelas importações que você seleciona e clica em atualizar, como na imagem abaixo…
Código…
Para fazer isso usei a rotina abaixo adapatada de uam dúvida postada no Stack Overflow, atenção para trocar o caminho da sua base de dados ACCESS e também o nome do processo de importação que vai atualizar…
Sub RodarImportacaoSalva() 'Abre o banco de dados e executa o procedimento Set objAccess = CreateObject("Access.Application") If Not objAccess Is Nothing Then With objAccess 'Troque o caminho abaixo pelo caminho do seu banco de dados e os XXXX da senha pela senha do seu banco. 'Se seu banco não possuir senha apague o XXX .OpenCurrentDatabase "C:\2019\MinhaBase.accdb", False, "MS Access;PWD=XXXX" .DoCmd.SetWarnings False 'Substitua base pelo nome da sua importação .DoCmd.RunSavedImportExport "BASE" .DoCmd.SetWarnings True End With End If 'Fecha o Access If Not objAccess Is Nothing Then With objAccess .CloseCurrentDatabase .Quit End With End If End Sub
Este foi um case real que aconteceu comigo e gostaria de colaborar pois sei que muitos irão precisar atualizar a importação salva no access através do excel com vba…
Caso saiba fazer isso de outra forma, tiver dúvidas, sugestões ou até mesmo críticas fico a disposição.
Um abraço!
Douglas Godoy
Boa Noite Funcionou muito bem para a minha planilha, agradeço o compartilhamento
Obrigado pelo feedback Danilo! Abraços
Olá Douglas, boa tarde.
Li seu artigo e achei interessante a adaptação que você fez para solucionar um problema que vinha enfrentando, mesmo porque vem de encontro com a minha realidade. Tenho um BD Access com muitas tabelas devidamente relacionadas e também muitas consultas, através do qual controlo 22 estoques da empresa onde trabalho. Recebo mensalmente arquivos em vários formatos: .csv, txt, zip, etc. e na maioria das vezes tenho que manipular os esmos para .xls e exportar para o Access. Até a exportação, sem problemas, mas o grande “X” da questão é que o Access (pelo menos ao meu ver) funciona bem com importações “não vinculadas”. Dá até para adaptar o código VBA que vc disponibilizou. Todavia, como eu faço minhas importações “vinculadas” não consigo achar um código adaptável ou uma Macro dentro do próprio Access para essa finalidade. Você tem alguma idéia?
Agradeço desde já a atenção e fico no aguado de breve retorno.
Um abraço.
Carlos.
Boa tarde, meu código para de rodar nessa linha: .DoCmd.SetWarnings False
Voce sabe como resolver?
Benjamin,
Deve verificar o nome e se seu banco tem senha.
Troque o caminho abaixo pelo caminho do seu banco de dados e os XXXX da senha pela senha do seu banco. ‘Se seu banco não possuir senha apague o XXX .OpenCurrentDatabase “C:\2019\MinhaBase.accdb”, False, “MS Access;PWD=XXXX”