Notifications
Clear all

Importar texto grande para célula única

20 Posts
3 Usuários
0 Reactions
2,642 Visualizações
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Bom dia

Busquei na base do Fórum por uma solução para um problema e encontrei um código disponibilizado pelo MAURO COUTINHO adaptado já de outro. A macro executa 90% do que desejo e sendo assim gostaria de contar com a ajuda dos especialistas para fazer apenas uma adaptação. Pela macro, o texto é quebrado em linhas e colunas no excel, não é isso que desejo.

Eu preciso importar todo o conteúdo do arquivo texto para uma única célula específica (que já está definida no código). A única adaptação no código e não buscar por quebras de linhas ou colunas. Importar o texto conforme está e colar em uma célula.

Obrigado!

Segue o código:

Public Sub ImportarArqTextoGrandes()
    Dim ultimaFila, fila, contador As Long
    Dim linea, NomeArquivo As String
    Dim Ficheiro As String
    Dim S As String, N As Integer, X As Variant
     
    Dim rg As Range
    Set rg = Range("A1")
    
    'Calcula a última linha da planilha
    Selection.End(xlDown).Select
    ultimaFila = Selection.Row
    
    'Seleciona a primeira vazia
    Selection.End(xlUp).Select
    
    'Abre a Cx de Dialogo ABRIR
    ArquivoTxt = Application.GetOpenFilename("Arquivos Texto(*.txt), *.txt")
    
    'Se nenhum arquivop selecionado sai da rotina
    If ArquivoTxt = False Or ArquivoTxt = "False" Then Exit Sub
    
        Ficheiro = ArquivoTxt
    
        'Abre o arquico texto selecionado
        Open Ficheiro For Input As #1
    
        'Variaveis de linhas e colunas
        fila = 1
        contador = 1
    
    'Enquanto o arq rexto contiver linhas preenchidas
    Do Until EOF(1)
        Line Input #1, S
        
        'Subsdtitui somene o caracter de Tabulação
        X = Split(S, Chr(9))
        
            For N = 0 To UBound(X)
                rg.Offset(0, N) = X(N)
            Next N
        
            'Mensagem na barra de status
            Application.StatusBar = "Lendo linha número = " & contador
            
            'Atualiza as Variáveis e coluna e linhas
            fila = fila + 1
            contador = contador + 1
        
            'Cria nova planilha quando planilha atual estiver cheia
            If fila > ultimaFila Then
                    'Aplica formatação na aba atual
                    ActiveSheet.Range("A:O").Columns.AutoFit
                    ActiveSheet.Range("A1:$O$" & contador - 1).Font.Size = 8
                
                'Adiciona uma nova Aba
                Worksheets.Add after:=ActiveSheet
                
                'Reinicia as Variáveis
                fila = 1
                contador = 1
                
                'Redefine os Ranges
                Set rg = Range("A1")
                Set rg = rg.Offset(0, 0)
                
                'Força o Reinicio
                GoTo sReiniciar
                
            End If
        
            Set rg = rg.Offset(1, 0)
        
sReiniciar:

    Loop
    
    'Fecha o arquivo Texto
    Close #1
    
    ActiveSheet.Range("A:O").Columns.AutoFit
    ActiveSheet.Range("A1:$O$" & contador).Font.Size = 8
    
End Sub
 
Postado : 26/11/2015 7:15 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei se entendi, pois o trecho

u preciso importar todo o conteúdo do arquivo texto para uma única célula específica

me deixou em duvida se são todas as linhas do txt (todo o arquivo)em uma unica célula
ou uma linha "inteira" em uma célula; altera a linha altera a celula.
Se for esse ultimo experimente alterar o trecho

        'Subsdtitui somene o caracter de Tabulação
        X = Split(S, Chr(9))
        
            For N = 0 To UBound(X)
                rg.Offset(0, N) = X(N)
            Next N

Por

rg.Offset(0, 0) = S

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/11/2015 1:30 pm
(@nelson-s)
Posts: 96
Trusted Member
 

Eu entendi que é importar o arquivo *.txt inteiro para uma célula. Se for isso, segue o código...

Public Sub ImportarArqTextoGrandes()

    Dim ArquivoTxt As Variant
    
    Dim ultimaFila, fila, contador As Long
    Dim linea, NomeArquivo As String
    Dim Ficheiro As String
    Dim S As String, N As Integer, X As Variant
    Dim rg As Range
    
    Set rg = Range("A1")
   
    'Calcula a última linha da planilha
    Selection.End(xlDown).Select
    ultimaFila = Selection.Row
   
    'Seleciona a primeira vazia
    Selection.End(xlUp).Select
   
    'Abre a Cx de Dialogo ABRIR
    ArquivoTxt = Application.GetOpenFilename("Arquivos Texto(*.txt), *.txt")
   
    'Se nenhum arquivop selecionado sai da rotina
    If ArquivoTxt = False Then Exit Sub
   
     Ficheiro = ArquivoTxt

     'Abre o arquico texto selecionado
     Open Ficheiro For Input As #1
     
     Selection = Input$(LOF(1), 1)
        
    'Fecha o arquivo Texto
    Close #1
    
    ActiveSheet.Range("A:O").Columns.AutoFit
   
End Sub



 
Postado : 26/11/2015 1:38 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá Reinaldo,

Tirando sua dúvida:

O arquivo texto pode possuir inúmeras linhas. Independente da quantidade, todas as linhas serão inseridas em um célula.
Eu tentei seguir sua orientação, mas fiz na intuição, não consegui. Você pode refazer a parte do código a ser alterada?

Obrigado.

 
Postado : 26/11/2015 1:46 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá Reinaldo,

Era essa a solução. Está Ok assim. Depois que enviei mais detalhes foi que vi sua resposta.

Apenas uma dúvida:
No código está definida a célula de destino, no caso A1. Esse detalhe é bem importante, mas ao executar o código, o texto foi inserido na célula ativa...O ideal seria inserir na célula definida no código.

Pode só dar uma verificada?

 
Postado : 26/11/2015 1:53 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

No teste que efetuei sempre inicia o preenchimento, independentemente da célula ativa, na célula A1, porem da guia ativa.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/11/2015 2:04 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá,

Me desculpe NELSON

Eu imaginei que quem estava me ajudando fosse o Reinaldo.

 
Postado : 26/11/2015 2:07 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Curioso,

Se eu executar o código várias vezes, ele vai inserir na linha 1 de colunas variadas. Tem uma parte do código que verifica a ultima linha / coluna preenchida, acho que isso está causando essa interferência.

 
Postado : 26/11/2015 2:11 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Veja...

 'Calcula a última linha da planilha
    Selection.End(xlDown).Select
    ultimaFila = Selection.Row
   
    'Seleciona a primeira vazia
    Selection.End(xlUp).Select
 
Postado : 26/11/2015 2:11 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Esse trecho apenas determina qual a ultima linha da planilha, para se o arquivo texto tiver mais linhas do que a planilha crie uma nova planilha e continue "importando" as linhas.
Porem se eventualmente ao iniciar a rotina estiver em uma outra coluna/celula que já possua dados, esse procedimento pode induzir algum equivoco.
Então selecione sempre a range("A1") ao rodar essa rotina.
inclua a linha conforme abaixo
Dim rg As Range
Range("A1").Select
Set rg = Range("A1")

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/11/2015 2:22 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Isso mesmo Reinaldo,

Agora está correto.

Acho que começo a entender melhor o código, e pensando dessa forma imaginei que existe outra parte dele que poderia ser suprimida. Diz repeito a seleção do arquivo texto.
Em alguns casos a importação se dará de vários arquivos textos, logo vai ser complicado selecionar cada um deles.

Nessa parte do código seria possível especificar o nome do arquivo ao invés de abrir a caixa para selecionar?. Todos os arquivos estarão na mesma pasta da planilha, logo isso agilizaria muito nosso trabalho, eu criaria um código para cada arquivo, ou faria a seleção do arquivo e destino direto no código...

Fora isso já está quase perfeito...

 
Postado : 26/11/2015 2:43 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

luiz, quanto a :

Em alguns casos a importação se dará de vários arquivos textos, logo vai ser complicado selecionar cada um deles.

Nessa parte do código seria possível especificar o nome do arquivo ao invés de abrir a caixa para selecionar?. Todos os arquivos estarão na mesma pasta da planilha, logo isso agilizaria muito nosso trabalho, eu criaria um código para cada arquivo, ou faria a seleção do arquivo e destino direto no código...

É possível ajustar o caminho e nome de arquivos direto na rotina, ou até alterar para opção de MultiSelect, assim podemos selecionar varios arquivos mas antes, gostaria de entender melhor, ou seja : Após abrir e copiar o texto de cada arquivo e colar na aba ativa, o proximo arquivo deverá gerar um novo arquivo excel ? Continuar a colar abaixo da ultima inserção ? ou colar em uma nova aba do mesmo arquivo ?

Para opção de lutiSelect a linha ficaria assim :
ArquivoTxt = Application.GetOpenFilename("Arquivos Texto(*.txt), *.txt", Title:="Selecione os Arquivos", MultiSelect:=True)

Se for isto antes de utiliza-la é necessário ajustar as demais linhas colocando a condição For .. Next e tambem a questão que coloquei acima

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/11/2015 6:33 am
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Bom dia Mauro, e obrigado.

Seguinte, deixa eu te explicar. tenho uma planilha que relaciona contratos de obras. Em determinada coluna existe a necessidade de inserir o acompanhamento do contrato. São informações referentes a cada contrato. Minha intenção é que esse acompanhamento seja feito em arquivo texto para posteriormente ser importado para a planilha na célula específica de cada contrato.

Então teríamos uma planilha com várias linhas que receberiam o texto de vários arquivos.

Um exemplo
No intervalo A1:A10 existem números de contratos, no intervalo B1:B10 será inserido o conteúdo de 10 arquivos textos, sendo na célula B1 o conteudo do arquivo CTR01, na B2 o conteúdo CTR02, na B3 o conteúdo CTR03 e assim sucessivamente, São vários contratos.

É isso.

 
Postado : 27/11/2015 7:29 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

luiz, o ideal seria anexar um modelo de seu arquivo, e detalhar tudo o que pretende, veja, primeiro começou com :
A única adaptação no código e não buscar por quebras de linhas ou colunas. Importar o texto conforme está e colar em uma célula.
Eu preciso importar todo o conteúdo do arquivo texto para uma única célula específica

Teve duas sugestões de solução,e com a rotina do Reinaldo você disse que teria de inserir sempre em "A1", agora temos Selecionar mais de um arquivo, inserir em mais de uma celula a partir de "B1" e pelo que entendi referente ao criterio do numero do contrato.
Então detalhe tudo o que pretende, ficará mais fácil do que a cada post ter uma coisa diferente.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/11/2015 7:48 am
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá Mauro,

Reconheço as controversas prévias da solução, mas realmente ao longo das possibilidades foi inevitável.
Como eu disse o código está bem próximo da perfeição. Enviei um modelo de como ficaria a planilha após a importação.

De tudo,obrigado.

Obs: Antes de descompactar o arquivo "Arquivo.txt" mude o nome para Ctr005.zip

 
Postado : 27/11/2015 11:32 am
Página 1 / 2