Ir ao conteúdo

Excel Macro para gerar txt com erro


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Olá, boa noite!

 

Tenho uma macro que exporta os dados de uma determinada planilha para um arquivo de texto. Funciona que é uma beleza!

 

Mas ao utilizar está macro em uma planilha com muitas colunas ocorre erro. Notei que acima de 25 colunas gera um erro em tempo de execução 13: tipos incompatíveis.

 

É possível contornar? Essa planilha tem mais de 40 colunas...

Sub gerar_txt()

Dim linha As Integer

    linha = 2

    Open Application.ThisWorkbook.Path & "\" & "NomeDoArquivo" & ".txt" For Output As 1



    Do Until plan1.Cells(linha, 1) = ""

        v1 = plan1.Cells(linha, 1).Value

        v2 = plan1.Cells(linha, 2).Value

        v3 = plan1.Cells(linha, 3).Value

        v4 = plan1.Cells(linha, 4).Value

        v5 = plan1.Cells(linha, 5).Value

        v6 = plan1.Cells(linha, 6).Value

        v7 = plan1.Cells(linha, 7).Value

        v8 = plan1.Cells(linha, 8).Value

        v9 = plan1.Cells(linha, 9).Value

        v10 = plan1.Cells(linha, 10).Value

        v11 = plan1.Cells(linha, 11).Value

        v12 = plan1.Cells(linha, 12).Value

        v13 = plan1.Cells(linha, 13).Value

        v14 = plan1.Cells(linha, 14).Value

        v15 = plan1.Cells(linha, 15).Value

        v16 = plan1.Cells(linha, 16).Value

        v17 = plan1.Cells(linha, 17).Value

        v18 = plan1.Cells(linha, 18).Value

        v19 = plan1.Cells(linha, 19).Value

        v20 = plan1.Cells(linha, 20).Value

        v21 = plan1.Cells(linha, 21).Value

        v22 = plan1.Cells(linha, 22).Value

        v23 = plan1.Cells(linha, 23).Value

        v24 = plan1.Cells(linha, 24).Value

        v25 = plan1.Cells(linha, 25).Value

        v26 = plan1.Cells(linha, 26).Value

        v27 = plan1.Cells(linha, 27).Value

        v28 = plan1.Cells(linha, 28).Value

        v29 = plan1.Cells(linha, 29).Value

        v30 = plan1.Cells(linha, 30).Value

        v31 = plan1.Cells(linha, 31).Value

        v32 = plan1.Cells(linha, 32).Value

        v33 = plan1.Cells(linha, 33).Value

        v34 = plan1.Cells(linha, 34).Value

        v35 = plan1.Cells(linha, 35).Value

        v36 = plan1.Cells(linha, 36).Value

        v37 = plan1.Cells(linha, 37).Value

        v38 = plan1.Cells(linha, 38).Value

        v39 = plan1.Cells(linha, 39).Value

        v40 = plan1.Cells(linha, 40).Value

        v41 = plan1.Cells(linha, 41).Value

        v42 = plan1.Cells(linha, 42).Value

        v43 = plan1.Cells(linha, 43).Value

        v44 = plan1.Cells(linha, 44).Value

        v45 = plan1.Cells(linha, 45).Value



        Print #1, v1 & "|" & v2 & "|" & v3 & "|" & v4 & "|" & v5 & "|" & v6 & "|" & v7 & "|" & v8 & "|" & v9 & "|" & v10 & "|" & v11 & "|" _

        & v12 & "|" & v13 & "|" & v14 & "|" & v15 & "|" & v16 & "|" & v17 & "|" & v18 & "|" & v19 & "|" & v20 & "|" & v21 _

        & v22 & "|" & v23 & "|" & v24 & "|" & v25 & "|" & v26 & "|" & v27 & "|" & v28 & "|" & v29 & "|" & v30 & "|" & v31 _

        & v32 & "|" & v33 & "|" & v34 & "|" & v35 & "|" & v36 & "|" & v37 & "|" & v38 & "|" & v39 & "|" & v40 & "|" & v41 _

        & v42 & "|" & v43 & "|" & v44 & "|" & v45



        linha = linha + 1



    Loop

   

    Close 1

   

    MsgBox "Processo concluído!"

  

End Sub

 

 

  • Solução
Postado

@Kleber Bispo Da forma que está fazendo dá muito trabalho colocar as colunas, se fossem 100 teria que escrever essa quantidade de linhas. Não percebo nenhum erro no código. Se possível anexe a planilha com dados fictícios onde o erro acontece.

 

Uma forma de deixar o código mais simples é com outro loop para as colunas, p.ex,

 

Assim é só passar a quantidade de colunas para o parâmetro QtdCol. Neste caso foram 45, mas pode passar a quantidade necessária sem ter que editar a Sub.

 

Sub MacroGeraTXT()
    Call GeraTXT( _
        ThisWorkbook.ActiveSheet, _
        ThisWorkbook.Path & "\NomeDoArquivo2.txt", 45)

    MsgBox "Processo concluído!"
End Sub

Sub GeraTXT(Planilha As Worksheet, Arquivo As String, QtdCol As Integer)
    Dim Texto   As String
    Dim Linha   As Long
    Dim Coluna  As Integer
    
    Linha = 2
    Coluna = 1
    
    Open Arquivo For Output As #1
    
    Do Until Planilha.Cells(Linha, 1).Value = ""
        While Coluna <= QtdCol
            Texto = Texto & Planilha.Cells(Linha, Coluna).Value _
                & IIf(Coluna < QtdCol, "|", "")
            Coluna = Coluna + 1
        Wend
        Print #1, Texto
        Texto = ""
        Coluna = 1
        Linha = Linha + 1
    Loop
    Close #1
End Sub

 

Postado
2 horas atrás, Midori disse:

@Kleber Bispo Da forma que está fazendo dá muito trabalho colocar as colunas, se fossem 100 teria que escrever essa quantidade de linhas. Não percebo nenhum erro no código. Se possível anexe a planilha com dados fictícios onde o erro acontece.

 

Uma forma de deixar o código mais simples é com outro loop para as colunas, p.ex,

 

Assim é só passar a quantidade de colunas para o parâmetro QtdCol. Neste caso foram 45, mas pode passar a quantidade necessária sem ter que editar a Sub.

 

Sub MacroGeraTXT()
    Call GeraTXT( _
        ThisWorkbook.ActiveSheet, _
        ThisWorkbook.Path & "\NomeDoArquivo2.txt", 45)

    MsgBox "Processo concluído!"
End Sub

Sub GeraTXT(Planilha As Worksheet, Arquivo As String, QtdCol As Integer)
    Dim Texto   As String
    Dim Linha   As Long
    Dim Coluna  As Integer
    
    Linha = 2
    Coluna = 1
    
    Open Arquivo For Output As #1
    
    Do Until Planilha.Cells(Linha, 1).Value = ""
        While Coluna <= QtdCol
            Texto = Texto & Planilha.Cells(Linha, Coluna).Value _
                & IIf(Coluna < QtdCol, "|", "")
            Coluna = Coluna + 1
        Wend
        Print #1, Texto
        Texto = ""
        Coluna = 1
        Linha = Linha + 1
    Loop
    Close #1
End Sub

 

Sua macro é mais inteligente. Vou utilizar.

 

Na verdade, essa tabela que estou transformando em txt está preenchida com fórmulas. Vi que o erro acontece quando existe #Ref ou #Valor em alguma célula.

 

Vou ter que tratar isso.

 

Obrigado.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!