MS Access | Quebra de Texto em Linhas com Comprimento Máximo

MS Access | Quebra de Texto em Linhas com Comprimento Máximo


Em muitos cenários de automação no Microsoft Access, é necessário manipular strings de texto extensas e formatá-las de maneira legível, especialmente em relatórios ou caixas de mensagem. A função BreakTextAtX fornece uma solução eficiente para esse problema, permitindo dividir um texto em várias linhas com base em um caractere delimitador e um comprimento máximo por linha.


 Aprenda: 17 Passos Essenciais para Melhorar seu Código VBA 


O funcionamento básico da função se dá pela análise de uma string de texto original e sua subsequente segmentação. Ela utiliza um caractere especificado, como um espaço em branco (ou outro delimitador definido pelo usuário), para determinar onde dividir o texto. Isso é particularmente útil em casos onde se deseja evitar que palavras sejam cortadas no meio, mantendo a integridade semântica de cada linha gerada.


Public Function BreakTextAtX(varOriginal As Variant, _

      Optional strBreakCharacter As String = " ", _

      Optional lngMaxLength As Long = 72) As Variant


' Função para dividir um texto em linhas menores com um comprimento máximo definido

' varOriginal: Texto original a ser quebrado

' strBreakCharacter: Caractere usado para quebrar o texto (padrão: espaço em branco)

' lngMaxLength: Comprimento máximo de cada linha (padrão: 72 caracteres)


Dim strNewString As String ' Armazena o texto formatado

Dim strWorking As String ' Parte atual do texto sendo processado

Dim strPart As String ' Parte do texto após a quebra

Dim strOriginalNoCrLf As String ' Texto original sem quebras de linha

Dim lngPosition As Long ' Posição atual no texto

Dim lngHold As Long ' Posição da última ocorrência do caractere de quebra

Dim lngLength As Long ' Comprimento total do texto original

Dim lngWorkLength As Long ' Comprimento da parte atual do texto sendo processado


' Obtém o comprimento do texto original

lngLength = Len(varOriginal & "")


' Verifica se o texto original tem conteúdo

If lngLength > 0 Then

      ' Remove quebras de linha (vbCr e vbLf) do texto original

      strOriginalNoCrLf = Replace(Replace(CStr(varOriginal), vbCr, ""), vbLf, "")

      strNewString = "" ' Inicializa o texto formatado

      lngPosition = 1 ' Começa na primeira posição do texto


      ' Loop para percorrer o texto original e dividir em partes menores

      Do While lngPosition <= lngLength

            ' Extrai uma parte do texto de acordo com o comprimento máximo definido

            strWorking = Mid(strOriginalNoCrLf, lngPosition, lngMaxLength)

            lngWorkLength = Len(strWorking) ' Obtém o comprimento da parte extraída


            ' Verifica se o comprimento da parte extraída é menor que o comprimento máximo

            If lngWorkLength < lngMaxLength Then

                  ' Se o texto formatado já tem conteúdo, adiciona uma quebra de linha

                  If Len(strNewString) > 0 And Len(strWorking) > 0 Then _

                        strNewString = strNewString & vbCrLf

                  ' Adiciona a parte final do texto e encerra o loop

                  strNewString = strNewString & strWorking

                  Exit Do

            Else

                  ' Procura pela última ocorrência do caractere de quebra

                  lngHold = InStrRev(strWorking, strBreakCharacter)

                  ' Se não houver caractere de quebra, usa o comprimento total da parte

                  If lngHold = 0 Then lngHold = lngWorkLength

                  ' Se o texto formatado já tem conteúdo, adiciona uma quebra de linha

                  If Len(strNewString) > 0 Then _

                        strNewString = strNewString & vbCrLf

                  ' Adiciona a parte do texto até a posição do caractere de quebra

                  strNewString = strNewString & Left(strWorking, lngHold)

                  ' Avança para a próxima parte do texto

                  lngPosition = lngPosition + lngHold

            End If

      Loop


      ' Retorna o texto formatado

      BreakTextAtX = strNewString

Else

      ' Se o texto original for nulo, retorna nulo; caso contrário, retorna uma string vazia

      If IsNull(varOriginal) Then

            BreakTextAtX = varOriginal

      Else

            BreakTextAtX = ""

      End If

End If


End Function



A aplicabilidade dessa função é vasta. Imagine que você precisa gerar relatórios que serão exibidos em caixas de texto de largura limitada, como em formulários de sistemas de inventário ou controle de estoque. Ao utilizar a função, o texto será formatado automaticamente em várias linhas, garantindo uma melhor apresentação e legibilidade. Isso pode ser usado tanto para exportação de relatórios quanto para visualizações dentro da interface do Access.


Outro exemplo prático seria o envio de notificações ou mensagens via e-mail, onde o limite de comprimento de uma linha pode ser crucial para manter a formatação correta. Em vez de manualmente ajustar o conteúdo, o código VBA faz isso de forma automática, adaptando-se ao tamanho máximo especificado pelo usuário e adicionando quebras de linha onde necessário.


 Que tal aprender estes códigos também: 

MS Access | Aplicando Função Concatenação de Valores nos Campos das Consultas
MS Access | Utilizando SendKeys de Forma Eficiente
MS Access | Automatizando a Compactação do Bancos de Dados
MS Access | Como Gerenciar Links das Tabelas
MS Access | Quebra de Texto em Linhas com Comprimento Máximo
MS Access | Monitoramento de Conexões de Usuários
MS Access | Mapeando 3.500 Erros com a Criação de Tabelas de Erros
MS Access | Código para Registro de Logs
MS Access | 17 Passos Essenciais para Melhorar seu Código VBA
MS Access | Código VBA para Backup de Todas as Tabelas Comentado


A função também lida de maneira robusta com situações em que o texto original contém quebras de linha (caracteres vbCr e vbLf), removendo-as antes de processar a string. Isso é especialmente útil quando se trabalha com dados importados ou exportados de outras fontes, garantindo que a formatação do texto final seja sempre consistente e previsível.


Por fim, a flexibilidade da função em permitir ao usuário definir tanto o caractere de quebra quanto o comprimento máximo de cada linha a torna aplicável em uma grande variedade de projetos e necessidades dentro do Access. Desde o controle de visualizações até a geração de relatórios, o BreakTextAtX facilita a manipulação de strings de texto de forma prática e eficiente.


  Clique aqui e nos contate via What's App para avaliarmos seus projetos 

Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com


 Série Donut Project 
DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes


 Clique nas capas abaixo e compre também: 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)


Série Top 10 Funções: Top 10 Funções VBA para o Microsoft Excel (Série Top 10 Funções - Microsoft Excel)


eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes

eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes

eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes

Nenhum comentário:

Postar um comentário

diHITT - Notícias