Fala gente, tudo beleza?
Estou precisando de uma ajuda com um código que não surgiu a luz para realizalo.
Segue:
Sub ImportaOp() 'On Error GoTo trata_erro Dim caixa As FileDialog Dim codigo Dim nome Set caixa = Application.FileDialog(msoFileDialogFilePicker) caixa.Title = "Selecione o arquivo" If caixa.Show = -1 Then For Each caminho In caixa.SelectedItems i = 5 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(1, 2).Value = Data Do While f.AtEndOfStream <> True linha = f.readline [b][color=#FF0000] 'Acha um cliente If linha Like "*NOME DO CLIENTE:*" Then[/color][/b] End Sub
Esse código abre um arquivo .txt e faz a análise dele, porém, a linha do cliente vem da seguinte forma:
- 1234567-8 NOME DO CLIENTE: CLIENTE TESTE
A minha ideia para a minha variável linha achar essa linha é usar o LIKE procurando por "NOME DO CLIENTE:" o problema é desmembrar essa informação!
Por exemplo, eu queria que na célula A1 venha o campo código do cliente e na A2 venha o nome do cliente.
Minha dificuldade, a quantidade de espaços antes do código numérico varia, por exemplo:
- 7-5 - 8 espaços em branco - 27-5 - 7 espaços em branco - 127-5 - 6 espaços em branco - 3127-5 - 5 espaços em branco - 93127-5 - 4 espaços em branco - 293127-5 - 3 espaços em branco - 1234567-8 - 2 espaços em branco
É possível fazer a análise dos dados através da memória da variável ou eu terei que identificar a linha, jogar no excel e fazer a análise?
Eu uso uma fórmula para resolver esse conflito no excel, segue:
=MID(D4;9;FIND("-";D4;1)-7) =MID(D5;8;FIND("-";D5;1)-6) =MID(D6;7;FIND("-";D6;1)-5) =MID(D7;6;FIND("-";D7;1)-4) =MID(D8;5;FIND("-";D8;1)-3) =MID(D9;4;FIND("-";D9;1)-2) =MID(D10;3;FIND("-";D10;1)-1)
Se eu errei algo na fórmula, desconsidere, apenas fiz para teste.
Poderiam me ajudar?
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Boa tarde!!
me desculpa mas fiquei boiando..não entendi
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Boa tarde!!
me desculpa mas fiquei boiando..não entendi
Tranquilo.
Simplesmente o código do cliente vem junto com o nome da seguinte maneira:
- 1234567-8 NOME DO CLIENTE: CLIENTE TESTE
Eu queria separar o código do nome dele e escrever o código na célula A1 e o nome na A2.
Minha dificuldade é, fazer isso num arquivo TXT e somente depois de separado pelo VBA, gravar as informações no excel.
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Boa tarde!!
Até alguém melhor que eu resolva, gostaria que postasse um exemplo (COMPACTADO).
Seria um arquivo de texto que você quer acerta para o mesmo fique ajustado no excel (cada dado em coluna, linha e célula)?
Att
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Boa tarde!!
Até alguém melhor que eu resolva, gostaria que postasse um exemplo (COMPACTADO).
Seria um arquivo de texto que você quer acerta para o mesmo fique ajustado no excel (cada dado em coluna, linha e célula)?
Att
Então, não posso enviar nada desse tipo! No caso, foi até difícil fazer o exemplo, por que os códigos de cliente que eu utilizei, tive que alterar para uns que não existissem!
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
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?
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
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
thelol, não entendi se quer dizer que com as duas rotinas resolveu a questão ou se ainda precisa de algo, se foi concluído, assinale o Tópico com Resolvido.
Quanto as rotinas que postou, percebe-se que se tratam de dois arquivos textos diferentes :
"Selecione o arquivo NORMAL" e
"Selecione o arquivo FLEX", com variações nas Referências e Variáveis, por isso que se torna imprenscindivel o envio destes arquivos, mesmo que com dados ficticios, com isto evitamos erros se tivermos de criar os Txts, uma vez que poderiamos estar criando campos totalmente diferentes do que consta nos arquivos originais.
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
thelol, não entendi se quer dizer que com as duas rotinas resolveu a questão ou se ainda precisa de algo, se foi concluído, assinale o Tópico com Resolvido.
Quanto as rotinas que postou, percebe-se que se tratam de dois arquivos textos diferentes :
"Selecione o arquivo NORMAL" e
"Selecione o arquivo FLEX", com variações nas Referências e Variáveis, por isso que se torna imprenscindivel o envio destes arquivos, mesmo que com dados ficticios, com isto evitamos erros se tivermos de criar os Txts, uma vez que poderiamos estar criando campos totalmente diferentes do que consta nos arquivos originais.[]s
Desculpe, foi um grande erro meu! Foi resolvido.
Novamente desculpem a falta de informação, mas não consegui fazer upload nem enviar algo fictício, o compliance não me permitiu.
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Fala gente!!! Coloquei o tópico como não resolvido por que eu estou no fim dessa macro e me surgiu outra dúvida, é possível fazer o seguinte:
If Sheet2.Cells(i, 1) NOT LIKE "123456-7*" Then outros = outros + Sheet2.Cells(i, 11) Else
Aqui não funfa o NOT LIKE.
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Experimente assim:
If Not Sheet2.Cells(i, 1) Like "123456-7*" ....
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Experimente assim:
If Not Sheet2.Cells(i, 1) Like "123456-7*" ....
Funciona que é uma beleza! Obrigado! Acabou passando batido.
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Vixi, acabei de verificar, não funciona! Eu queria que a fórmula fosse assim:
If Sheet2.Cells(i, 1) NOT LIKE "123456-7*" Then outros = outros + Sheet2.Cells(i, 11) Else
IF NOT funciona, porém, o LIKE teria que ser também, ou algum LIKE <> é possível?
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Thelol,
A sintaxe para "not like" é not a sua variavel ou campo like "qq". Ou seja deveria funcionar.
Como vc que que o valor seja diferente de algo, pode utilizar tb
If left(Sheet2.Cells(i,1),8) <> "123456-7"
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Thelol,
A sintaxe para "not like" é not a sua variavel ou campo like "qq". Ou seja deveria funcionar.
Como vc que que o valor seja diferente de algo, pode utilizar tb
If left(Sheet2.Cells(i,1),8) <> "123456-7"
Valeu Reinaldo, novamente, muito obrigado! Exatamente o que eu precisava.
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel