Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Natan G Martins

Excel Retirar ultima linha em branco de txt criado por VBA

Recommended Posts

Bom dia a todos, estou com o seguinte problema:

Tenho uma planilha que possui dados a partir da linha 8, fiz uma macro que gera um txt com os dados que estiverem a partir da linha 8 e ela funciona muito bem, porém o txt gerado fica com a ultima linha em branco. Eu gostaria que essa macro deixasse no txt apenas as linhas que possuirem valores.

 

 

Segue macro

Sub TXT_Contabil()

Application.ScreenUpdating = False

Dim DIR As String
Dim UltLin
Dim i
Dim LinExp
Dim Separador As String

'FORMULAS
Range("A8").Select
   ActiveCell.FormulaR1C1 = "=REPT(""0"",14-LEN(IF(RC[3]="""","""",ROUND(RC[5]*100,0))))&IF(RC[3]="""","""",ROUND(RC[5]*100,0))"
    Range("B8").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[2]="""","""",CONCATENATE(REPT(""0"",2-LEN(DAY(RC[3]))),DAY(RC[3]),REPT(""0"",2-LEN(MONTH(RC[3]))),MONTH(RC[3]),REPT(""0"",4-LEN(YEAR(RC[3]))),YEAR(RC[3])))"
    Range("C8").Select
    ActiveCell.FormulaR1C1 = "=REPT("" "",120-LEN(RC[8]))"
    Range("A8:c8").Select
    Selection.Copy
    Range("d7").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, -1).Select
    Range(Selection, Selection.End(xlToLeft)).Select
    Range(Selection, Selection.End(xlUp)).Select
    ActiveSheet.Paste
    
    Range("a7").Select
    ActiveCell.FormulaR1C1 = "VALOR"
    Range("b7").Select
    ActiveCell.FormulaR1C1 = "DATA"
    Range("c7").Select
    ActiveCell.FormulaR1C1 = "ESP. HIST."
    Range("A7:c7").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.349986266670736
        .PatternTintAndShade = 0
    Selection.Font.Bold = True
    End With
    
'Ordenar Filial e data
    Range("K8").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToLeft)).Select
    Range(Selection, Selection.End(xlToLeft)).Select
    Range(Selection, Selection.End(xlToLeft)).Select
'    Range(Selection, Selection.End(xlToLeft)).Select
    
    ActiveWorkbook.Worksheets("Contabil").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Contabil").Sort.SortFields.Add Key:=Range("D8:D1048576" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Contabil").Sort.SortFields.Add Key:=Range("E8:E1048576" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Contabil").Sort
        .SetRange Range("A8:k1048576")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'COMEÇO GERAR TXT

'Determina o tamanho da planilha (considerando que a coluna "A" esta preenchida.
UltLin = Cells(Cells.Rows.Count, "A").End(xlUp).Row
'Diretorios para salvar a planilha
DIR = Range("L2") & Range("N4") & Range("M2") & Range("N2")
Separador = Range("O2")

'Abre o arquivo Saida na "Area de Trabalho" do usuario "Local"
'Open "C:\txt\001.txt" For Output As #1
Open DIR For Output As #1
'Workbooks.OpenText Filename:=( For Output As #1

'Executa um loop da linha 8 até a ultima linha de dados

For i = 8 To UltLin
' Monta a linha
LinExp = Left(Cells(i, 30), 1)  'Matriz
LinExp = LinExp & "     "           'Espaços iniciais
LinExp = LinExp & "" & Left(Cells(i, 4), 7) & "008"          'E5_FILIAL
LinExp = LinExp & Separador & Left(Cells(i, 2), 8)  'E5_DATA
LinExp = LinExp & Separador & Left(Cells(i, 1), 16) 'E5_VALOR

If Left(Cells(i, 7), 10) = "" Then
LinExp = LinExp & Separador & "          "   'E5_CONTADEBITO vazia
Else
LinExp = LinExp & Separador & Left(Cells(i, 7), 10)   'E5_CONTADEBITO
End If

If Left(Cells(i, 8), 10) = "" Then
LinExp = LinExp & Separador & "          "   'E5_CONTACREDITO vazia
Else
LinExp = LinExp & Separador & Left(Cells(i, 8), 10)   'E5_CONTACREDITO
End If

If Left(Cells(i, 9), 9) = "" Then
LinExp = LinExp & Separador & "         "   'E5_CCD vazio
Else
LinExp = LinExp & Separador & Left(Cells(i, 9), 9)   'E5_CCD
End If

If Left(Cells(i, 10), 9) = "" Then
LinExp = LinExp & Separador & "         "   'E5_CCC vazio
Else
LinExp = LinExp & Separador & Left(Cells(i, 10), 9)   'E5_CCC
End If

LinExp = LinExp & Separador & Left(Cells(i, 11), 120) & Left(Cells(i, 3), 120) 'E5_HISTOR"

' Grava a linha no arquivo
Print #1, LinExp

Next i

'Fecha o arquivo
Close #1

MsgBox ("Arquivo salvo com sucesso na pasta: " & DIR)

Application.ScreenUpdating = True

End Sub

AMORT_Distrib Resultado.txt

Editado por gustavodbg
Ferramenta code adicionada ao código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhor disponibilizar a planilha com dados.

 

Mas teste isso:

 

For i = 8 To UltLin - 1

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×