Como eliminar espaços de macro para concatenar intervalos

Olá,

Estou desenvolvendo uma planilha para padronizar e facilitar o envio do nome de alunos que concluíram o ensino médio. Cada escola deve me enviar uma lista contendo, além de alguns dados da escola, o nome dos alunos, seus respectivos números de registro e a página do livro de registros em que se encontram.
Comecei a desenvolver uma planilha que permitisse o envio de até 600 nomes de uma única vez. A plan1 é o local onde devem ser inseridos os dados da escola e os dados dos alunos concluintes. Na plan3 (ainda sem nome definido) eu obtenho um texto com estes dados concatenados. O formato final é:

ESCOLA DO ESTADO, Credenciada pela Portaria nº 5678 de 01/01/2000-SE: ENSINO MÉDIO, Livro 09, João da Silva, 1, 235; João da Silva, 2, 235; João da Silva, 3, 235; João da Silva, 4, 235; Diretor José dos Santos Reg. nº789-X, Secretário Escolar Maria de Souza Reg. nº 6321-A.

Como tenho um intervalo de 600 nomes para concatenar, além dos dados da escola, tive que procurar uma solução na internet que me permitisse concatenar grandes intervalos. Acabei achando uma macro chamada “myconcatenate”. A princípio pareceu resolver todos meus problemas, no entanto,quando copiei o resultado concatenado na planilha 3 e colei no editor de texto para formatação final, vi que a cada 9.900 caracteres, foi inserido um parágrafo. Seria isto devido ao código da macro ou uma limitação do Calc? Para ter mais segurança na utilização desta planilha, inclusive por outros colegas de trabalho e mais futuramente, precisaria ter certeza de que não fossem inseridos estes parágrafos no texto final, pois se trata de uma lista que deve ser formatada periodicamente para envio para publicação em Diário Oficial. Desta forma, minha primeira dúvida é:

1 - Seria possível eliminar este parágrafo que é inserido a cada 9.900 caracteres?

A outra questão é que esta macro funciona bem quando eu preencho os 600 nomes do intervalo, mas supondo que uma escola tenha apenas 100 alunos concluintes para enviar, a macro insere no texto final um espaço para cada registro vazio. Sendo assim:

2 - Seria possível editar a macro para que ela ignorasse os registros vazios ao invés de inserir espaços?

Por último, gostaria de saber o que me aconselham quanto ao formato do arquivo final a ser disponibilizado para as escolas, pois a maior parte delas utiliza o excel, em diferentes versões, e aqui na sede utilizamos o calc. Já perdi alguns dados quando fui salvar edições feitas aqui, no calc, pois o arquivo inicial era do excel mais atual, e após salvar, algumas fórmulas que continham o “myconcatenate” foram completamente apagadas.

Desde já agradeço a ajuda de todos e disponibilizo a planilha em anexo!

P.S.: Parece que eu necessito de uma certa pontuação para anexar o arquivo, sendo assim, vou copiar o código da macro em questão aqui embaixo:

Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Option Explicit

Public Function MyConcatenate(ByVal myRange As Range)
    Dim vCell, vResult As String
    For Each vCell In myRange.Cells
        vResult = vResult & " " & vCell.Text
    Next
    MyConcatenate = Mid(vResult, 2)
End Function

Boa noite,


> 1 - Seria possível eliminar este parágrafo que é inserido a cada 9.900 caracteres?

Realmente encontrei o mesmo problema quando colei como Texto sem formatação. Mas quando colei o texto concatenado em outro editor de texto, não existiu a quebra de parágrafo. Talvez seja alguma limitação (bug) atual no “processo de colar” do Writer.

Um solução que encontrei foi ir em Editar > Colar especial … e escolher Texto formatado [RTF].


> 2 - Seria possível editar a macro para que ela ignorasse os registros vazios ao invés de inserir espaços?

Segue a macro reescrita para “pular” células vazias.

Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Option Explicit

Public Function MyConcatenate(ByVal myRange As Range)
   Dim vCell, vResult As String
   For Each vCell In myRange.Cells
      If vCell.Text <> "" Then
         vResult = vResult & " " & vCell.Text
      End If
   Next
   MyConcatenate = Mid(vResult, 2)
End Function

Atte,

Obrigado amigo! Testei a macro e colei o texto em formato RTF. Resolvido!