Vc pode "preparar" um arquivo com alguns exemplos ficticios, não é necessario dados reais, porem a estrutura do txt e do excel são fundamentais, para que não precisemos tentar adivinhar como os dados se alinham.
Esse arquivo txt, os "registros" são separados par algum identificador do tipo "#" ou ";", ou é por tamanho fixo de registros?
Fala Reinaldo, tudo bom? É por tamanho fixo dos registros.
Atualmente eu refiz o código e ficou algo assim:
ImportaN
Sub ImportaN()
'On Error GoTo trata_erro
Dim caixa As FileDialog
Dim i As Integer
Dim cliente
Dim contrato
Dim isin
Dim dist
Dim pregão As Date
Dim vencimento As Date
Dim qtdori As Long
Dim qtdajust As Long
Dim qtddispo As Long
Dim pretax As Currency
Dim vol As Currency
Dim contrap As String
Set caixa = Application.FileDialog(msoFileDialogFilePicker)
caixa.Title = "Selecione o arquivo NORMAL"
If caixa.Show = -1 Then
For Each caminho In caixa.SelectedItems
i = 1
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(caminho, 1)
linha = f.readline
'Procura data
Data = Mid(linha, 5, 10)
linha = f.readline
Worksheets("Principal").Cells(2, 1).Value = Data
Worksheets("BaseN").Activate
Do While f.AtEndOfStream <> True
linha = f.readline
'Acha um cliente
If Mid(linha, 8, 7) = "CLIENTE" Then
cliente = Trim(Mid(linha, 16, 173))
'linha = f.readline
Else
Do While Mid(linha, 16, 2) = "BR"
'Acha o termo do cliente.
contrato = Trim(Mid(linha, 4, 11))
isin = Trim(Mid(linha, 15, 13))
dist = Trim(Mid(linha, 29, 3))
pregão = Trim(Mid(linha, 34, 10))
vencimento = Trim(Mid(linha, 46, 10))
qtdori = Trim(Mid(linha, 60, 13))
qtdajust = Trim(Mid(linha, 76, 13))
qtddispo = Trim(Mid(linha, 92, 13))
pretax = Trim(Mid(linha, 106, 14))
vol = Trim(Mid(linha, 139, 14))
'contrap = Trim(Mid(linha, 182, 7))
contrap = " " & Trim(Mid(linha, 178, 9))
linha = f.readline
'Escreve no excel
Worksheets("BaseN").Cells(i, 1).Value = cliente
Worksheets("BaseN").Cells(i, 2).Value = contrato
Worksheets("BaseN").Cells(i, 3).Value = isin
Worksheets("BaseN").Cells(i, 4).Value = dist
Worksheets("BaseN").Cells(i, 5).Value = pregão
Worksheets("BaseN").Cells(i, 6).Value = vencimento
Worksheets("BaseN").Cells(i, 7).Value = qtdori
Worksheets("BaseN").Cells(i, 8).Value = qtdajust
Worksheets("BaseN").Cells(i, 9).Value = qtddispo
Worksheets("BaseN").Cells(i, 10).Value = pretax
Worksheets("BaseN").Cells(i, 11).Value = vol
Worksheets("BaseN").Cells(i, 12).Value = contrap
'Ajusta o i e pula linha
i = i + 1
Loop
End If
Loop
Next
End If
End Sub
ImportaF
Sub ImportaF()
'On Error GoTo trata_erro
Dim caixa As FileDialog
Dim i As Integer
Dim codigo As String
Dim nome As String
Dim contrato
Dim isin
Dim dist
Dim pregão As Date
Dim vencimento As Date
Dim qtdori As Long
Dim qtdajust As Long
Dim qtddispo As Long
Dim pretax As Currency
Dim vol As Currency
Dim contrap As Integer
Set caixa = Application.FileDialog(msoFileDialogFilePicker)
caixa.Title = "Selecione o arquivo FLEX"
If caixa.Show = -1 Then
For Each caminho In caixa.SelectedItems
i = 1
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(caminho, 1)
linha = f.readline
'Procura data
Data = Mid(linha, 5, 10)
linha = f.readline
Worksheets("Principal").Cells(2, 2).Value = Data
Worksheets("BaseF").Activate
Do While f.AtEndOfStream <> True
linha = f.readline
'Acha um cliente
If Mid(linha, 2, 7) = "CLIENTE" Then
codigo = Trim(Mid(linha, 13, 7))
nome = Trim(Mid(linha, 24, 199))
'linha = f.readline
Else
Do While Mid(linha, 13, 2) = "BR"
'Acha o termo do cliente.
contrato = Trim(Mid(linha, 3, 9))
isin = Trim(Mid(linha, 13, 12))
dist = Trim(Mid(linha, 26, 3))
pregão = Trim(Mid(linha, 30, 10))
vencimento = Trim(Mid(linha, 41, 10))
qtdori = Trim(Mid(linha, 57, 14))
qtdajust = Trim(Mid(linha, 74, 14))
qtddispo = Trim(Mid(linha, 93, 14))
pretax = Trim(Mid(linha, 114, 9))
vol = Trim(Mid(linha, 136, 13))
contrap = " " & Trim(Mid(linha, 180, 4))
linha = f.readline
'Escreve no excel
Worksheets("BaseF").Cells(i, 1).Value = codigo
Worksheets("BaseF").Cells(i, 2).Value = nome
Worksheets("BaseF").Cells(i, 3).Value = contrato
Worksheets("BaseF").Cells(i, 4).Value = isin
Worksheets("BaseF").Cells(i, 5).Value = dist
Worksheets("BaseF").Cells(i, 6).Value = pregão
Worksheets("BaseF").Cells(i, 7).Value = vencimento
Worksheets("BaseF").Cells(i, 8).Value = qtdori
Worksheets("BaseF").Cells(i, 9).Value = qtdajust
Worksheets("BaseF").Cells(i, 10).Value = qtddispo
Worksheets("BaseF").Cells(i, 11).Value = pretax
Worksheets("BaseF").Cells(i, 12).Value = vol
Worksheets("BaseF").Cells(i, 13).Value = contrap
'Ajusta o i e pula linha
i = i + 1
Loop
End If
Loop
Next
End If
End Sub
Funciona relativamente bem, mas é um pouco lento! Quem me ajudou com isso foi um outro rapaz aqui do trabalho e que também é user do fórum.
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 20/03/2012 6:28 am