Notifications
Clear all

Importar TxT

4 Posts
2 Usuários
0 Reactions
3,557 Visualizações
(@cleiton-jm)
Posts: 115
Estimable Member
Topic starter
 

Boa tarde galera,

Preciso de uma mão de vcs,procurei na pesquisa do forum e nada, vamos la:

Preciso de uma macro que importe varios arquivo txt que fica em uma pasta, os txt são todos separados por ponto e virgula, o x da questão está quando a planilha chega no limite de quantidades de linha da planilha( no excel 2010 1.048.536 acho) para execução, gostaria que automaticamente ele criasse outra planilha e continuasse listando o txt até cabar.

No momento estou usando essa macro, só que não consegui colocar ele pra criar nova planilha quando atingir a capacidade da primeira e assim por diante...
Se alguem souber como fazer, ou tiver outra macro que fassa o mesmo processo, fico agradecido

abrass a todos!!

'-------------------------------------------------------------------------------------------------------
Sub ImportarTXT()
Dim Pasta As String
Dim Arquivo As String
Dim LinInicial As Long
Dim LinFinal As Long

'Abre caixa de diálogo para selecionar a pasta onde estão
'os arquivos
With Application.FileDialog(msoFileDialogFolderPicker)
.Show
Pasta = .SelectedItems(1)
End With

Arquivo = Dir(Pasta & "*.txt")

While Arquivo <> ""

Workbooks.OpenText Filename:=Pasta & "" & Arquivo, _
DataType:=xlDelimited, Other:=True, OtherChar:=";", _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1))

'Linha inicial onde deve-se colocar o nome do arquivo
LinInicial = ThisWorkbook.ActiveSheet.Range("A" & Cells.Rows.Count).End(xlUp).Offset(1, 0).Row
ActiveSheet.[A1].CurrentRegion.Copy _
ThisWorkbook.ActiveSheet.Range("A" & Cells.Rows.Count).End(xlUp).Offset(1, 0)

'Linha final onde deve-se colocar o nome do arquivo
LinFinal = ThisWorkbook.ActiveSheet.Range("A" & Cells.Rows.Count).End(xlUp).Offset(1, 0).Row
ThisWorkbook.ActiveSheet.Cells(LinInicial, "F").Resize(LinFinal - LinInicial, 1).Value = Arquivo
ActiveWorkbook.Close False
Arquivo = Dir
DoEvents
Wend
MsgBox "Fim de Execução da Macro"
End Sub

 
Postado : 01/07/2013 1:07 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

De uma olhada em :
viewtopic.php?f=10&t=8313&p=44135#p44135

ou

viewtopic.php?f=21&t=7663

Creio que a rotina disponibilizada pelo Colega Mauro possa lhe ser util

 
Postado : 01/07/2013 1:29 pm
(@cleiton-jm)
Posts: 115
Estimable Member
Topic starter
 

Reinaldo até interessante as rotinas postada pelo nosso amigo Mauro, só que ta muito complexa pra mim entender ainda, não estou conseguindo adaptar ao meu modo, como por exemplo, a separação das colunas por ponto e virgula encima dessa macro, e tambem preciso encaixar no codigo pra puxar todos os TXT que estão em uma pasta.

 
Postado : 01/07/2013 2:19 pm
(@cleiton-jm)
Posts: 115
Estimable Member
Topic starter
 

Bom galera to de volta na parada, com uma dor de cabeça a menos rsrsr

Depois de estudar muito sobre como funicona o código elabora por Mauro Coutinho, indicado por Reinaldo, conseguir fazer oque queria, agora surgiu outro problema, tenho 4 colunas que quando importado para o excel, fica como texto, tem como converter essas coluna que estão em texto para numero (1.250,00), Observação no txt ele está tambem assim (1.250,00).

Segue a macro modificado por mim se alguem precisar

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 Linha As String
    Dim rg As Range
    Dim Delimitador As String
    Dim Vetor
    
    Delimitador = InputBox("Defina o delimitador", "Delimitador")

    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, Linha
        
        'Subsdtitui somene o caracter de Tabulação
        X = Split(Linha, Delimitador)
        
            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 : 01/07/2013 6:22 pm