Notifications
Clear all

Limpar nomes de Céluas/Intervalos

12 Posts
1 Usuários
0 Reactions
2,248 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia caros,

Estou importando uma base de dados, de um arquivo ".txt" da seguinte forma:

Dim addBASE As String
addBASE = "CLIENTES"
endBASE = "\redemeulocalbase.txt"

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & endBASE, Destination:=Range(linhaPARTIDA))
        .Name = addBASE
... etc
End With

Tudo ok, até aqui, e o intervalo das células que contém a base importada, assume o nome como defini em ".Name = addBASE", ficando "CLIENTES".

Acontece que eu preciso renovar essa base algumas vezes, e a partir da segunda vez, a macro começa a adicionar automaticamente "_1", "_2", etc... conforme a qtde de vezes que repito o processo, ficando "CLIENTES_1", "CLIENTES_2", etc.

Mesmo se eu apagar esse intervaldo antes da importação, com o comando:

ActiveWorkbook.Names(addBASE).Delete

Ele consegue apagar o intervalo, mas o próximo, ele assume com a nova regra.

Preciso de uma soloção com duas hipóteses.

1ª) Ou a macro reconhece qualquer coisa após o hunderline, do tipo [ode]ActiveWorkbook.Names(addBASE & "_" & *).Delete apagando esse intervalo para que depois eu possa nomeá-lo certo, ou;
2ª) Alguma macro para limpar todos os nomes de interlavos definidos.

Alguém?

 
Postado : 27/11/2012 7:07 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

Talvez isso o ajude

Sub AleVBALimpaIntervalosDefinidos()
    Dim nm As Name
    For Each nm In ThisWorkbook.Names
        nm.Delete
    Next nm
End Sub
 
Postado : 27/11/2012 7:10 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Excelente Alexandre,

Obrigado, porém ele continua assumindo a sequencia, mesmo eu limpando todos os nomes... Tem idéia de como posso resolver isso?

Mesmo assim, essa sua macro vai me ajudar muito.

 
Postado : 27/11/2012 7:25 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

EU sou burro, para entender as coisas de primeira, se você pudesse postar um arquivo modelo compactado, e eu entendendo, talvez eu possa ajuda lo.
:?
Att

 
Postado : 27/11/2012 7:29 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Me parece que a "nomeação" e pela repetição da query, experimente "deletar" a query antes da repetição

    
Dim addBASE As String
addBASE = "CLIENTES"
endBASE = "D:ReinaldoArquivos GrupoExcelAS_wasde-11-12-2002.txt"
    For Each qt In ActiveSheet.QueryTables
        qt.Delete
    Next
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & endBASE, Destination:=Range("A1"))
            .Name = addBASE
    ... etc
    End With
 
Postado : 27/11/2012 7:50 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Opa, desculpe-me Alexandre.

Cada vez que vc executar a macro Importar, verá que o intervalo da base importada assume o nome que pré-determinei, porém, se executar pela sugunda vez, o sistema adiciona ao nome do intervalo o "_1" e na terceira vez o "_2" e assim por diante.

 
Postado : 27/11/2012 7:53 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Não da para eu olhar o exemplo no momento, mas uma opção seria fazer a verificação se o Nome já existe utilizando a instrução "IF", se existir pular a instrução de criar novo.

[]s

 
Postado : 27/11/2012 10:48 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Gde Mauro, show!

Com a ajuda do Alexandre + a sua (Mauro) consegui solucionar... é meio óbvio até, rs, mas eu não tinha pensado nisso.

Executei a solução do Alexandre após a importação (eliminando todos os nomes), depois defini o nome que quero.

Simples assim :D

Obrigado e gde abraço

 
Postado : 27/11/2012 11:35 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Somente como info.
Ao executar a rotina da query, a mesma fica gravada junto com a respectiva planilha.
Talvez seja preciso limpa-las; pois ao ser re-executada; uma nova conexção/rotina é criada e gravada nessa planilha.
No seu exemplo verifique em Dados --> Conexões, e verá.
Por ser uma rotina/planilha pequena, quase não se percebe, porem em uma rotina que maneje uma gama maior de dados/importaçao, haverá um ganho de bytes (ou megabytes) em sua planilha.
Em um exemplo de uma conexão com internet que presenciei (uma rotina para baixar balanços), apos cada "rodada" , o arquivo engordava algo em torno de 1 gb; bastava "deletar" as querys gravadas, lque o arquivo retornava ao tamanho (ou bem proximo) que tinha no inicio.

 
Postado : 27/11/2012 11:58 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo, muito bom!

Realmente verifiquei, existia várias conexões, estava "muito sujo".
No meu caso, não aumentou muito o tamanho da planilha, mas eu imagino que em alguns meses usando a planilha, isso iria ficar sério.

Tem uma rotina para limpar essas conexões?

Muito obrigado ;-)

 
Postado : 28/11/2012 5:48 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pode executar antes de uma nova query, ou (eu prefiro) após a execução da mesma

For Each qt In ActiveSheet.QueryTables
qt.Delete
Next

 
Postado : 28/11/2012 5:50 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

For Each qt In ActiveSheet.QueryTables
qt.Delete
Next

Perfeito!

Tudo funcionando a mil...

Muito obrigado Reinaldo :D

 
Postado : 28/11/2012 6:56 am