Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fatos Contábil

Exportação de movimentação para txt

Recommended Posts

Bom Dia amigos(as),

 

Estamos com a seguinte situação:

 

Atualmente já realizamos a geração de arquivo txt a partir de uma planilha em excel. Porém houve mudança de nosso software e tivemos que alterar o layout para realizar a importação do txt, onde agora temos que trazer o CNPJ ou CPF em uma coluna específica. O problema é que em alguns arquivos o número de CNPJ ou CPF vem junto com a descrição do evento. Então, teríamos que separar o conteúdo para alocá-lo na coluna correta.

Geralmente recebemos deste modo a célula com a descrição:

12345678910114 - Pagamento realizado

Estamos tentando realizar a exportação desta célula em vba com o seguinte código:

campo(12) = Left(Cells(i, 7), Find("-", Cells(i, 7)) - 1)

Onde:

campo(12) - Corresponde a coluna 11, onde o CNPJ/CPF deve ficar;

i - Corresponde a linha, que será incrementado ao final do código para fazer a leitura da próxima linha;

Cells(i,7) - Corresponde a célula que contém a descrição total, com CNPJ e escrita.

 

A idéia do código é coletar o CNPJ, que está a esquerda do "-" e preencher com esta informação o campo(12), para geração do arquivo txt.

Entretanto ao rodar o código, acontece erro de tipos incompatíveis.

 

O que podemos fazer?

 

Desde já agradeço a ajuda.

 

Obrigado!

Ewerton Ventura

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Vetor "campo(12)" é de formato String?

 

Pois se for está faltando a conversão .ToString() ao final do código

 

Find("-", Cells(i, 7)) - 1).ToString()

 

ou

 

Left(Cells(i, 7).ToString()

 

O que eu acredito que esteja errado.

 

Acho que você poderia utilizar o comando CStr para tal fim:

 

campo(12) = CStr(Left(Cells(i, 7), Find("-", Cells(i, 7)) - 1))

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Vetor "campo(12)" é de formato String?

 

Pois se for está faltando a conversão .ToString() ao final do código

 

Find("-", Cells(i, 7)) - 1).ToString()

 

ou

 

Left(Cells(i, 7).ToString()

 

O que eu acredito que esteja errado.

 

Acho que você poderia utilizar o comando CStr para tal fim:

 

campo(12) = CStr(Left(Cells(i, 7), Find("-", Cells(i, 7)) - 1))

 

Ainda não consegui Khaos, continuamos com o erro. Quando aciono a macro ele me informa:

Find("-", Cells(i,7)) = <tipos incompatíveis>

 

Segue abaixo o código completo:

 

Sub gerar_txt()

   Dim Arquivo As String
   Dim campo(12) As String
   Dim Find
   Dim valor As String
   Dim i As Long
   diret_arquiv = "D:\IT" & Right$(String$(4, Left$("0", 1)) & Cells(6, 2), 4) & "_" & Format(Now, "ddmmyyyy") & ".TXT"

   i = 10
   Open diret_arquiv For Output As #1

   While Cells(i, 3).Value <> ""


       valor = Replace(Str(Cells(i, 5)), ",", ".")
       Cells(i, 2) = Format(Cells(i, 2), ["dd/mm/yyyy"])



       If Len(Cells(i, 1).Value) < 16 Then
           campo(2) = Cells(i, 1).Value & String(16 - Len(Cells(i, 1).Value), " ")
       Else
           campo(2) = Cells(i, 1).Value

       End If

           campo(3) = Cells(i, 2).Value


       If Len(Cells(i, 3).Value) < 6 Then
           campo(4) = Right$(String$(6, Left$("0", 1)) & Cells(i, 3), 6)
       Else
           campo(4) = Cells(i, 3).Value

       End If

       If Len(Cells(i, 4).Value) < 6 Then
           campo(5) = Right$(String$(6, Left$("0", 1)) & Cells(i, 4), 6)
       Else
           campo(5) = Cells(i, 4).Value

       End If

       If Len(Trim(valor)) < 13 Then
           campo(6) = Right$(String$(13, Left$("0", 1)) & Trim(valor), 13)
       Else
           campo(6) = valor

       End If

       If Len(Cells(i, 6).Value) < 6 Then
           campo(7) = Right$(String$(6, Left$("0", 1)) & Cells(i, 6), 6)
       Else
           campo(7) = Cells(i, 6).Value

       End If


           campo(8) = mid(Cells(i, 7), 18, 250)


       If Len(Cells(i, 8).Value) < 6 Then
           campo(9) = Right$(String$(6, Left$("0", 1)) & Cells(i, 8), 6)
       Else
           campo(9) = Cells(i, 8).Value

       End If
       If Len(Cells(i, 9).Value) < 6 Then
           campo(10) = Right$(String$(6, Left$("0", 1)) & Cells(i, 9), 6)
       Else
           campo(10) = Cells(i, 9).Value

       End If
       If Len(Cells(i, 10).Value) < 20 Then
           campo(11) = Cells(i, 10).Value & String(20 - Len(Cells(i, 10).Value), " ")
       Else
           campo(11) = Cells(i, 10).Value

       End If

           campo(12) = CStr(Left(Cells(i, 7), Find("-", Cells(i, 7)) - 1))


       Print #1, Cells(6, 2) & "," & campo(3) & "," & campo(4) & "," & campo(5) & "," & campo(6) & "," & campo(7) & "," & campo(8) & "," & "DCTO" & campo(11) & "," & campo(2) & "," & campo(12)
       i = i + 1

   Wend
   Close #1

End Sub

 

Obrigado pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então creio que ao buscar o valor:

Cells(i,7)

você na verdade não esteja pegando o texto da célula e sim identificando a localização.

 

Tente algo como

Find("-", CStr(Cells(i,7)))

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então creio que ao buscar o valor:

Cells(i,7)

você na verdade não esteja pegando o texto da célula e sim identificando a localização.

 

Tente algo como

Find("-", CStr(Cells(i,7)))

Olá Khaos,

 

Mesmo assim ainda não estamos conseguindo. Entretanto, se vou manualmente, através da interface da planilha e insiro na célula da coluna 11, que seria o campo(12), a função

=ESQUERDA(G10;PROCURAR("-";G10)-1)

Aí ele me retorna corretamente o valor.

Mesmo que houvessem 2 macros, o interessante seria se ele percorrece todas as linhas onde há valor na coluna 1, e se possível verificasse se há o elemento (neste caso "-") inserido na coluna G antes de realizar a função, de modo a evitar a ocorrência do resultado #VALOR onde não houvesse "-".

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então manualmente ele funciona, mas você quer que ele faça o mesmo, ou seja, procurar o "-" em todas as células abaixo?

 

Sim, exatamente isto. Estamos por enquanto realizando manualmente mesmo.

 

Abraços.

 

Atenciosamente

Ewerton Ventura

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.