Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kadu Oliveira

VBA Excel - Obter dados externos txt sem salvar consulta

Recommended Posts

Amigos,

 

Estou com um problema que não encontro a solução em nenhum lugar do planeta. :upset:

 

Gostaria de criar uma conexão com o txt, mas sem salvar a definição da consulta, pois depois de vários loops o Excel acaba sobrecarregado de tantas conexões e fica lento.

 

Parte do código que estou utilizando:

 

Sub ImportaTxt()

     With ActiveSheet.QueryTables.Add(Connection:= _
         "TEXT;C:\Relatorio.txt", _
         Destination:=Range("$A$1"))
         .Name = "Teste"
         .FieldNames = True
         .RowNumbers = False
         .FillAdjacentFormulas = False
         .PreserveFormatting = True
         .RefreshOnFileOpen = False
         .RefreshStyle = xlInsertDeleteCells
         .SavePassword = False
         .SaveData = True
         .AdjustColumnWidth = True
         .RefreshPeriod = 0
         .TextFilePromptOnRefresh = False
         .TextFilePlatform = 932
         .TextFileStartRow = 1
         .TextFileParseType = xlFixedWidth
         .TextFileTextQualifier = xlTextQualifierDoubleQuote
         .TextFileConsecutiveDelimiter = False
         .TextFileTabDelimiter = True
         .TextFileSemicolonDelimiter = False
         .TextFileCommaDelimiter = False
         .TextFileSpaceDelimiter = False
         .TextFileColumnDataTypes = Array(1, 1, 1, 1)
         .TextFileFixedColumnWidths = Array(24, 2, 4)
         .TextFileTrailingMinusNumbers = True
         .Refresh BackgroundQuery:=False
     End With
End Sub

 

Queria saber qual a propriedade no VBA referente a opção no Excel 2007: DADOS > CONEXÕES > PROPRIEDADES. Ítem "Salvar definição de consulta"

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Kadu,não tenho muito conhecimento em VBA excel.

 

Mas...

 

Para acessar dados de um arquivo texto em VB é assim:

http://www.macoratti.net/txt_arqs.htm

 

Você pode fazer uma aplicativo em vb que importe os dados do arquivo texto e depois exporte para o excel.

 

Não se isso que você precisa.

 

 

Aquiles, Obrigado pela resposta! Esse link me ajuda muito em outros projetos, mas para esse não tenho como usar uma aplicação VB, precisaria saber qual propriedade da QueryTable é relativo a imagem abaixo porque só tenho como usar o excel:

 

conexoexcel.jpg

 

Ja tentei também apagar a conexão depois de feita, mas dá erro quando faço outra conexão.

 

Abraço!

 

Amigos,

 

Alguém consegue decifrar esse enigma? :upset:

 

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Khaos!

 

Não consegui inserir sua sugestão nessa macro. Poderia detalhar como posso fazer?

 

Obrigado!

 

 

Você utilizou

 

conexao.dispose()

 

para apagar e na hora de criar de novo se lembrou de colocar

 

Connection nome as new connection(...)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Tive o mesmo problema e consegui mechendo até acertar.

Sub importar()


'Faz com que a tela não pisque acelerando a macro
'Obs.: no final do codigo deve colocar "Application.ScreenUpdating = True"
     Application.ScreenUpdating = False

'Apaga a os dados antigos
    Sheets("Plan1").Select
    Range("A1:j1048576").Select
    Selection.ClearContents
    Range("A1").Select
    
'Importa arquivo
    Sheets("Plan1").Select
    Range("A1").Select
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\relatorio.txt", _
        Destination:=Range("$A$1"))
        .Name = "relatorio"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = False
        .AdjustColumnWidth = False
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
         
'Apaga a conexão
 Selection.QueryTable.Delete
 
'atualiza a tela
 Application.ScreenUpdating = True
    
'Exibe a mensagem
 MsgBox ("Atualizado com Sucesso!!!")

    
    End With
End Sub

 

Planilha

http://www.4shared.com/rar/0T34oEIN/teste.html

Coloque o arquivo de texto na pasta c:\

Se vc conseguiu de outra forma posta aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jonas,

 

Como eu tinha um for com mais de 1.000 arquivos, eu estava utilizando de outra forma, após concluir todas as conexões tinha um outro for que apagava as conexões com o:

 

ThisWorkbook.Connections(x).Delete

 

O problema é que em alguns casos depois de deletar, nunca mais conseguia conectar outro arquivo, dava erro.

 

Vou testar sua sugestão.

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Kadu,

Estava buscando solucionar a mesma questão e achei em outro blog, não sei se já resolveu isso, mas para que fique aqui para próximas referências:

O código para deletar todas as propriedades de pesquisa de uma planilha (sheet) é:

Dim qt As QueryTable
    
    For Each qt In ActiveSheet.QueryTables
        If qt.Refreshing Then qt.CancelRefresh
        qt.Delete
    Next
    ActiveSheet.UsedRange.Clear 

Caso queira deletar somente uma específica pode usar a seguinte opção:

ActiveSheet.QueryTables("ftp_data_integration_gdrive_50").Delete

Espero ter ajudado!

 

 

Abs,

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.