Notifications
Clear all

Extrair Arquivos Zipados

16 Posts
2 Usuários
0 Reactions
2,211 Visualizações
(@michel008)
Posts: 0
New Member
Topic starter
 

Pessoal,

Sou novo aqui no fórum.
Tenho uma macro baixa arquivos de um local específico, porém, os arquivos vem zipados do site onde os baixo.

Preciso descompactá-los mas não quero um novo código "do zero", quero apenas implementar a linha de código que extraia esses arquivos.

Abaixo as Subs que utilizo:

'Variável que armazena o destino dos arquivos
Public Mylocal As String

Private Declare Function URLDownloadToFile _
Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

'Procedimento principal
Sub Download_CheckList_CVM()

'Variáveis para armazenar o nome da pasta e nome do arquivo, respectivamente
Dim pastaDadosCVM, arquivo As String
'Contador
Dim i As Integer
'Vetor de 4 posições que armazena os quatro arquivos que serão baixados
Dim arrArquivo(1 To 4) As String

'Contador inicia com 1 (primeira linha da planilha)
i = 1
'Repete instruções até que encontre uma célula vazia
Do While Cells(i, 1) <> ""
'Variável "pastaDadosCVM" recebe o nome que está na linha atual (1ª coluna)
pastaDadosCVM = Cells(i, 1)
'Variável "arquivo" recebe o nome que está na linha atual (2ª coluna)
arquivo = Cells(i, 2)

'Variável "Mylocal" recebe o diretório
Mylocal = "A:Adm Fiduciário20. Analise de Risco e Carteira - CRVDados ExternosDados CVM" & pastaDadosCVM & ""
'Chama a função "Download"
Call Download(Mylocal, arquivo)

arrArquivo(i) = arquivo
i = i + 1
Loop

Dim x As Integer

'Envia mensagem ao usuário informando que os arquivos foram baixados e, lista o nome dos mesmos
MsgBox "Download dos arquivos efetuado com sucesso! " & vbCrLf & vbCrLf & _
arrArquivo(1) & vbCrLf & arrArquivo(2) & vbCrLf & arrArquivo(3) & vbCrLf & arrArquivo(4)

End Sub

'Função que realiza o download dos arquivos
Sub Download(Mylocal, arquivo)

'Tratamento de erro
On Error GoTo Err

'Variável auxiliar
Dim Auxiliar As Long
'Recebe a URL origem e caminho, respectivamente
Dim URL As String, CaminhoLocal As String

'Endereço do website onde estão os arquivos + nome dos arquivos
URL = " http://sistemas.cvm.gov.br/cadastro/" & arquivo

'Chama função para criar pastas
Call CriarPasta(Mylocal)

'Variável "CaminhoLocal" recebe o diretório de destino e nomes dos arquivos
CaminhoLocal = Mylocal + arquivo
'
Auxiliar = URLDownloadToFile(0, URL, CaminhoLocal, 0, 0)

Exit Sub

Err: MsgBox "Erro no download do arquivo"

End Sub
'Função para criar pasta
Sub CriarPasta(Mylocal)

'Criação de objeto para criar pasta
Dim fso As Object, NomePasta
Set fso = CreateObject("Scripting.FileSystemObject")
'Variáveis para guardar a data, ano, mês e dia
Dim data, ano, mes, dia As String

'Variável "data" recece o valor da célula C2
data = Range("C2")
'Variável "ano" recece apenas o ano da data atual
ano = Year(data)
'Variável "mes" recece apenas o mês da data atual
mes = Month(data)
'Variável "dia" recece apenas o dia da data atual
dia = Day(data)

'Define o formato de ano e dia com 2 dígitos
mes = Format(mes, "00")
dia = Format(dia, "00")

'Nomenclatura da pasta. Ex: 2015_04_22
NomePasta = ano & "_" & mes & "_" & dia

'
Mylocal = Mylocal & NomePasta & ""

If Not fso.FolderExists(Mylocal) Then
fso.CreateFolder (Mylocal)
End If

End Sub

 
Postado : 20/05/2015 8:32 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Seja Bem vindo ao forum, michel.
Quanto a sua questão :
"Preciso descompactá-los mas não quero um novo código "do zero", quero apenas implementar a linha de código que extraia esses arquivos."

Se pesquisar no Forum encontrara varios tópicos referentes a descompactar arquivos, um deles seria o tópico abaixo, mas veja que é utilizado o WINRAR, se você utilizar outro descompactador deverá pesquisar qual os parametros do mesmo.

Outra coisa seria quanto a sua afirmação "não quero um novo código "do zero", que parece mais intimação, mas como este é um forum onde procuramos ensinar alguma coisa, o ideal é saber como o mesmo funciona, em vez de querer já pronto, sendo assim veja a rotina que se encontra no link que passei e veja se consegue ajustar, seriam somente duas linhas.

Descompactar via VBA arquivo .ZIP
viewtopic.php?f=10&t=2542

[]s

 
Postado : 20/05/2015 9:06 am
(@michel008)
Posts: 0
New Member
Topic starter
 

Mauro,

Disse eu não quero um novo código do zero porque este que mostrei já está em produçã na empresa onde trabalho.
Todos os dias faço download desses arquivos e, se eu fosse começar outro código do zero, iria tomar muito tempo e parar a produção aqui....

Não quis intimidar ninguém.
Já olhei em vários tópicos na internet, já tinha olhado tbm esse que vc mandou o link, mas não sei onde implementar na minha macro.

Você poderia me dizer onde implemento essa funcionalidade aqui no meu código??

Grato.

 
Postado : 20/05/2015 9:17 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

michel, sem problemas, então vamos lá.

Analisando a rotina onde o arquivo é baixado, temos a linha :
'Função que realiza o download dos arquivos
Sub Download(Mylocal, arquivo)

'Variável "CaminhoLocal" recebe o diretório de destino e nomes dos arquivos
CaminhoLocal = Mylocal + arquivo

Então após a instrução :
Auxiliar = URLDownloadToFile(0, URL, CaminhoLocal, 0, 0)
Adicione a linha abaixo :
Shell "C:Arquivos de programasWinRARWinRAR.exe e " & CaminhoLocal, vbMinimizedFocus

Uma obs quanto a linha acima, é que tem de ajustar o caminho onde se encontra o arquivo WINRAR (Pasta), por exemplo, no meu PC esta pasta é : "C:Program Files" e obviamente você tem de ter o WINRAR instalado.
Ajustado isto, o arquivo será descompactado no diretório que foi criado pela rotina "Sub CriarPasta(Mylocal)"

Faça os testes e se for isto, lembre-se de dar o tópico como Resolvido e clicar na mãozinha agradecendo.

[]s

 
Postado : 20/05/2015 10:22 am
(@michel008)
Posts: 0
New Member
Topic starter
 

Mauro,

No meu caso os arquivos não estão zipados pelo Winrar, e sim pelo Zip do Windows (nem sei se é esse o termo correto...)

Será que vai ter algum problema???

 
Postado : 20/05/2015 11:08 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Mauro,
No meu caso os arquivos não estão zipados pelo Winrar, e sim pelo Zip do Windows (nem sei se é esse o termo correto...)
Será que vai ter algum problema???

michel, até onde eu sei, o WINRAR descompacta varios tipos de arquivos, inclusive ".zip", faça um teste antes e veja se corre tudo certo, se não, troque pela rotina abaixo e teste:

'Função que realiza o download dos arquivos
Sub Download(Mylocal, arquivo)
    Dim oApp As Object

    'Tratamento de erro
    On Error GoTo Err

    'Variável auxiliar
    Dim Auxiliar As Long
    'Recebe a URL origem e caminho, respectivamente
    Dim URL As String, CaminhoLocal As String
    
    'Endereço do website onde estão os arquivos + nome dos arquivos
    URL = "http://sistemas.cvm.gov.br/cadastro/" & arquivo

    'Chama função para criar pastas
    Call CriarPasta(Mylocal)

    'Variável "CaminhoLocal" recebe o diretório de destino e nomes dos arquivos
    CaminhoLocal = Mylocal + arquivo

    'Extrai os arquivos para a pasta criada
    Set oApp = CreateObject("Shell.Application")
    oApp.Namespace(Mylocal).CopyHere oApp.Namespace(CaminhoLocal).items


    Exit Sub

Err: MsgBox "Erro no download do arquivo"

End Sub

[]s

 
Postado : 20/05/2015 12:43 pm
(@michel008)
Posts: 0
New Member
Topic starter
 

O problema é que não tenho permissão para instalar o Winrar aqui.

 
Postado : 20/05/2015 12:57 pm
(@michel008)
Posts: 0
New Member
Topic starter
 

Mauro,

Testei a rotina como você disponibilizou (com a parte da extração dos arquivos) mas não deu certo.

Vai direto para: Err: MsgBox "Erro no download do arquivo"

 
Postado : 20/05/2015 1:05 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

michel, em qual das rotinas ?
As duas teem esta mensagem.

Se for esta segunda, eu não tenho como testar da forma que você está uzando em baixar arquivo da net, então procure usar "Debug.Print" e veja se os caminhos e nome do arquivo estão correto, então nesta rotina do download adicione as linhas :
Logo depois desta :
'Variável "CaminhoLocal" recebe o diretório de destino e nomes dos arquivos
CaminhoLocal = Mylocal + arquivo

Coloque estas :
Debug.Print Mylocal
Debug.Print CaminhoLocal

Depois de colocar pressione CTRL + G e abrira uma janela de depuração das variáveis e nela será mostrado o que estamos capturando nestas Variáveis, depois poste o resultado aqui.

Se ainda estiver com erro, anexe seu arquivo devidamente compactado conforme as regras do forum e mais tarde em casa faço os testes.

[]s

[]s

 
Postado : 20/05/2015 1:20 pm
(@michel008)
Posts: 0
New Member
Topic starter
 

Ok.

Eu compilei as rotinas e com as variáveis acho que está tudo certo.
Está funcionando o download dos arquivos... Só a extração que não mesmo....

Bom, estou enviando anexo a planilha.

Grato.

 
Postado : 20/05/2015 1:39 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

michel, neste seu modelo na rotina de download não estão as linhas para descompactar ? você chegou a alterar e utilizar uma das duas que passei ?

Já estou saindo do serviço, mais tarde dou uma olhada.

[]s

 
Postado : 20/05/2015 1:45 pm
(@michel008)
Posts: 0
New Member
Topic starter
 

Ah... eu tive que tirar, para quando amanhã eu chegar no trabalho os arquivos de 21/05 sejam baixados.

Att.

 
Postado : 20/05/2015 1:54 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ok.
Eu compilei as rotinas e com as variáveis acho que está tudo certo.
Está funcionando o download dos arquivos... Só a extração que não mesmo....

Bom, estou enviando anexo a planilha.

Grato.

michel, aconteceu uns imprevistos e não deu para olhar seu arquivo ontem, mas agora está ok.
O que estava acontecendo é devido a você ter nos nomes dos diretórios, "espaços" e com isto o winrar não reconhecia e pulava para a linha de erro.
No modelo anexo, ajustei esta parte e tambem coloquei outra rotina que utiliza o descompactador padrão do windows, neste modelo está utilizando o winrar e funcionou perfeitamente nos testes que fiz, você só tem de ver se o caminho onde está instalado o winrar é o mesmo, alias, se não encontrar o winrar será emitido uma mensagem e sai da rotina.
Faça os testes e veja se funciona da forma que pretende.

Download e descompacta arquivo

.

Se correr tudo bem, lembre-se de dar o tópico como resolvido e clicar na mãozinha agradecendo.

[]s

 
Postado : 21/05/2015 3:30 pm
(@michel008)
Posts: 0
New Member
Topic starter
 

Mauro,

Obrigado pela atenção!

Eu não tenho permissão para instalar o Winrar aqui, estou numa empresa onde o acesso é bem restrito. Por isso, não consigo nem abrir o anexo que você enviou (está em ".rar").
Você poderia enviá-lo em ".zip" ??

Quanto aos espaços nos nomes dos diretórios, é um caminho que está na rede corporativa, não posso alterar...

Att.

 
Postado : 22/05/2015 9:33 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Michel, tive problemas com este arquivo no serviço, não sei porque estava dando como corrompido e não deixava nem eu executar, por isto não enviei antes, como pode ver no tópico que criei : viewtopic.php?f=10&t=15932.

Mas isto acontece só no serviço, então anexei outro no post acima como ".zip", faça os testes e veja se corre tudo bem.

[]s

 
Postado : 22/05/2015 6:15 pm
Página 1 / 2