Notifications
Clear all

Loop em pastas de trabalho externas sem precisar abri-las

20 Posts
3 Usuários
0 Reactions
3,744 Visualizações
(@vguedes)
Posts: 47
Trusted Member
Topic starter
 

Pessoal, estou criando uma macro para pesquisar determinados dados de uma planilha em um certo diretório, sem precisar abri-la.

Segue o código abaixo.

Sub contab()
Dim str, sum1, Foldername As String
Dim str2 As String
Dim geracao As Double
Dim i, rlast As Integer



Foldername = Workbooks("CONTABILIZAÇÃO1.xlsm").Sheets("CONTROLE").Cells(1, 2)

Workbooks("CONTABILIZAÇÃO1.xlsm").Sheets("CONTROLE").Cells(4, 2) = Foldername

i = 6
Do
   str2 = GetInfoFromClosedFile(Foldername, "SUM001.1 – Sumário.xls", "SUM001.1 – Sumário", "A" & i) ' <<<========= ERRO: TIPOS INCOMPATÍVEIS
   Workbooks("CONTABILIZAÇÃO1.xlsm").Sheets("CONTROLE").Cells(i, 3) = str2
   If str2 = "LIGHT ENERGIA" Then
     str = GetInfoFromClosedFile(Foldername, "SUM001.1 – Sumário.xls", "SUM001.1 – Sumário", "B" & i)
     If (InStr(1, str, "TGG a,s,r,w - (MWh)", 1)) <> 0 Then
      geracao = GetInfoFromClosedFile(Foldername, "SUM001.1 – Sumário.xls", "SUM001.1 – Sumário", "C" & i)
      Workbooks("CONTABILIZAÇÃO1.xlsm").Sheets("CONTROLE").Cells(6, 2) = geracao
     End If
   End If
   i = i + 1
   If i > 100 Then Exit Do
Loop


    
End Sub



Private Function GetInfoFromClosedFile(ByVal wbPath As String, _
                                            wbName As String, _
                                            wsName As String, _
                                            cellRef As String) As Variant
    
    Dim arg As String
        GetInfoFromClosedFile = ""
        
        If Right(wbPath, 1) <> "" Then wbPath = wbPath & ""
        
        If Dir(wbPath & "" & wbName) = "" Then Exit Function 'If Dir(wbPath & "" & wbName) = "" Then Exit Function
        
            arg = "'" & wbPath & "[" & wbName & "]" & _
                wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1)
        
        On Error Resume Next
        GetInfoFromClosedFile = ExecuteExcel4Macro(arg)

Porém, como demonstrado acima, a planilha está dando um erro de tipos incompatíveis e eu não estou sabendo solucionar.

Alguém poderia me ajudar?

Abraços!

 
Postado : 19/09/2013 8:02 am
(@depoisteconto)
Posts: 183
Reputable Member
 

Antes de tentar debugar seu código, veja essa outra alternativa http://www.ambienteoffice.com.br/excel/ ... _fechadas/

De toda forma, em qual linha aparece o erro?

At

 
Postado : 19/09/2013 8:50 am
(@vguedes)
Posts: 47
Trusted Member
Topic starter
 

Eu fiz algo parecido com isto, a diferença é que fiz um loop para obter um valor a partir de uma pesquisa de strings.

O erro está na primeira linha após o "Do".

Eu imaginei que talvez tivesse declarado algo errado, mas procurei e não achei nenhum erro...

 
Postado : 19/09/2013 9:06 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O ideal seria anexar os dois arquivos compactados como .Rar, Zip, ou outro tipo, desta forma só posso ir por suposição.

Mensagem de Tipo Incompativel geralmente é devido a alguma Declaração de Tipo diferentes, então em primeiro lugar :

Que tipo de Valor estamos armazenando em Foldername ? :
Foldername = Workbooks("CONTABILIZAÇÃO1.xlsm").Sheets("CONTROLE").Cells(1, 2) - Aqui estamos atribuindo a Variável Foldername o que se encontra no Range ("A2").
Depois joga este valor para ("A4")

Na chamada a Function :
str2 = GetInfoFromClosedFile(Foldername, "SUM001.1 – Sumário.xls", "SUM001.1 – Sumário", "A" & i)
o Erro deve estar dando por incompatibilidade com um dos valores nesta linha.

Procure percorre a Rotina Passo a Passo utilizando as Teclas F8 e va acompanhando os retornos das Variáveis.

Se não conseguir anexe os dois arquivos.

[]s

 
Postado : 19/09/2013 10:57 am
(@vguedes)
Posts: 47
Trusted Member
Topic starter
 

Prezado Mauro, anexei as duas pastas de trabalho.

Joguei o valor de "FolderName" em a4 só para conferir se a leitura estava correta.

Ainda não consegui descobrir o erro, mas desde já agradeço pela disposição.

 
Postado : 19/09/2013 11:34 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O erro é devido as pastas que serão lidas não estar o formato do Excel (apesar da extensão xls). Abra a pasta diretamente no Excel que deverá receber uma mensagem conforme abaixo.
Corrigido essa "irregularidade"(abre o arquivo e salva no formato Excel") ainda há a diferença do nome do arquivo com o que está em seu código

 
Postado : 19/09/2013 1:34 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!
Tente adaptar

    strPath = "C:Test"
    strFile = "Arquivo1.xls"
    strSheet = "Plan1"
    strRng = Range("A1").Address(1, 1, xlR1C1)
    
    strRef = "'" & strPath & "[" & strFile & "]" & strSheet & "'!" & strRng
    
    Result = ExecuteExcel4Macro(strRef)

Leia:
http://www.rondebruin.nl/win/s9/win006.htm
http://www.ozgrid.com/VBA/find-dates.htm
Att

 
Postado : 19/09/2013 4:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Guedes, se ainda não ajustou conforme as orientações do Reinaldo, tambem tem a questão do nome da aba que se encontra no arquico que contem os dados, não consegui identificar a diferença, mas copiando o nome da aba e colando na rotina deu certo, tambem fiz as devidas alterações nnas rotinas

No anexo estão os dois arquivos, fiz algumas alterações para poder testar a rotina, deletei todas as abas do arquivo para ficar mais leve e poder anexa-lo.

A principio faça um testes com estes dois arquivos antes de migrar para o seu original.

[]s

 
Postado : 19/09/2013 8:04 pm
(@vguedes)
Posts: 47
Trusted Member
Topic starter
 

Mauro e Alexandre, obrigado pela contribuição.

Mauro, realmente testei salvando no formato excel e aparentemente deu certo. Essa planilha eu baixo de um servidor e pretendo usar outras dela para compor a macro, o ruim vai ser ter que salvá-las uma por uma no formato excel para funcionar, mas paciência. Estou meio sobrecarregado agora, mais tarde eu vejo com calma a planilha que você mandou, mas desde já agradeço!

Alexandre, tem alguma diferença entre o código que você escreveu e o que eu usei? Porque eu o uso em outras macros e nunca deu erro.

Um abraço.

 
Postado : 20/09/2013 8:37 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Essa planilha eu baixo de um servidor e pretendo usar outras dela para compor a macro, o ruim vai ser ter que salvá-las uma por uma no formato excel.

Guedes, a titulo de curiosidade ou até mesmo quem sabe podermos contornar a situação.

Você diz baixar de um servidor, isto quer dizer que está fazendo download, mas ela já vem neste tipo ? com a extensão do Excel ? ou você que coloca ou converte atraves de outro programa ?

[]s

 
Postado : 20/09/2013 10:27 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Essa planilha eu baixo de um servidor e pretendo usar outras dela para compor a macro, o ruim vai ser ter que salvá-las uma por uma no formato excel para funcionar, mas paciência.

Para contornar, se não puder corrigir na origem, experimente:

Sub AbreFecha()
Application.DisplayAlerts
    ChDir "D:ReinaldoDownloadsPasta"
    Workbooks.Open Filename:="W:ENERGIAGESTAODEATIVOSváriosCCEECONTABILIZAÇÃO2013Light Energia7 - JulhoSUM001.1 - Sumário.xls"
    ActiveWorkbook.SaveAs , xlWorkbookNormal
    ActiveWindow.Close
Application.DisplayAlerts = True
End Sub

...não consegui identificar a diferença,

A diferença na nomenclatura deve-se ao "-", no código está com o caractere 150, e no nome do arquivo (o xls) com o caractere 45

 
Postado : 20/09/2013 11:52 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

...não consegui identificar a diferença,

A diferença na nomenclatura deve-se ao "-", no código está com o caractere 150, e no nome do arquivo (o xls) com o caractere 45

Reinaldo bem interessante esta obs quanto ao tipo de caractere.

Então resolvi fazer alguns testes :
No Excel 2003 ele é aberto normalmente, tanto pelo Menu Abrir ou dando dois cliques no arquivo.

No Excel 2007, não abre, dando a mensagem postada por você, então alterei o nome do arquivo, deixando sumario.xls, e tambem não abriu, onde fiquei na duvida se seria mesmo a questão do caractere.

Reabri o arquivo no Excel 2003 e escolhi a Opção "SALVAR COMO" e na caixa na Opção - Salvar Tipo Como já está selecionado "Pagina da Web de Arquivo Único (*.mht; *.mhtml)".

Então acredito ser esta a razão de abrir no 2007, mas ainda vou aguardar a resposta do Guedes de como é feitra a importação deste arquivo, que eu acredito ele estar salvando diretamente de uma pagina da web.

[]s

 
Postado : 20/09/2013 1:53 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Mauro, veja o cabecalho do arquivo antes de ser "convertido" (aberto no editor de texto)

Então apesar de estar com a extensão xls, é basicamente um arquivo texto (ou htm)

 
Postado : 20/09/2013 2:23 pm
(@vguedes)
Posts: 47
Trusted Member
Topic starter
 

Reinaldo,

Vou testar esse código na segunda feira. Muito obrigado!

Ainda tenho uma dúvida básica, queria finalizar o loop quando encontrasse uma célula em branco, alguém sabe como fazer? Testei algumas maneiras e deu erro.

Mauro,

Sim, eu faço o download desses arquivos na internet. Não sei o motivo dos arquivos virem dessa maneira...

 
Postado : 20/09/2013 5:02 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Guedes, fui fazer um teste para ajustar a questão da finalização do Loop e percebi que não alterei o nome do arquivo na rotina, salvei o arquivo com o nome "CONTABILIZAÇÃO_Mauro.xlsm" e na rotina está o nome antigo "CONTABILIZAÇÃO1.xlsm", então antes de executar a Rotina ajuste o nome para "CONTABILIZAÇÃO_Mauro.xlsm".

Quanto a finalização do Loop, faça as seguintes alterações na rotina :
Sub contab_Alterada_Mauro()

Logo apos a ilnha :
str2 = GetInfoFromClosedFile(Foldername, "SUM001.1 - Sumário.xls", "SUM001.1 - Sumário", "A" & i)
Coloque a instrução:
If str2 = 0 Then Exit Do ' Sai do Loop quando não tiver mais valor na Coluna "A"

E no final da Rotina desabilite ou apague a linha :
If i > 44 Then Exit Do

Faça os testes e qq duvida retorne.

[]s

 
Postado : 20/09/2013 7:18 pm
Página 1 / 2