Eu tenho algum código VBA onde as linhas são longas e quero enviá-lo para algum lugar, onde é (não 100% estrito) o limite de 80 caracteres on-line.
O VBA permite criar uma quebra de linha de código colocando " _
" antes de " enter
". (Obviamente, isso não funciona dentro de strings, que devem ser divididas em substrings e conectadas com " &
". Como você pode ver abaixo.)
Existe alguma ferramenta para adicionar "quebras de linha" no código automaticamente?
Ou talvez regex?
Tentei pesquisar, mas sem resultados válidos.
Código original:
'Some looooooong comment Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut a volutpat dolor. In risus odio, pharetra a arcu in, efficitur ornare lectus. Maecenas non aliquet leo. Praesent luctus blandit magna, et sagittis ex porta et.
MsgBox("Some text in MsgBox. Donec vulputate eros ac nulla hendrerit auctor. In hac habitasse platea dictumst. Proin fermentum augue elit, eget consequat massa mattis et. Integer semper imperdiet diam sit amet malesuada.", 64, "Title of MsgBox")
'Another comment now with link to doc. https://example.com/?bs64=SWYgeW91IGFyZSBzbWFydCBlbm91Z2ggdG8gZGVjb2RlLCB5b3UgbXVzdCBkZWZpbml0ZWx5IHdhdGNoIHRoaXM6IGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9b0hnNVNKWVJIQTA=
Código procurado:
'Some looooooong comment Lorem ipsum dolor sit amet, consectetur adipiscing
'elit. Ut a volutpat dolor. In risus odio, pharetra a arcu in, efficitur
'ornare lectus. Maecenas non aliquet leo. Praesent luctus blandit magna, et
'sagittis ex porta et.
MsgBox("Some text in MsgBox. Donec vulputate eros ac nulla hendrerit auctor." _
& "In hac habitasse platea dictumst. Proin fermentum augue elit, eget " _
& "consequat massa mattis et. Integer semper imperdiet diam sit amet" _
& " malesuada.", 64, "Title of MsgBox")
'Another comment now with link to doc.
'https://example.com/?bs64=SWYgeW91IGFyZSBzbWFydCBlbm91Z2ggdG8gZGVjb2RlLCB5b3UgbXVzdCBkZWZpbml0ZWx5IHdhdGNoIHRoaXM6IGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9b0hnNVNKWVJIQTA=
Obrigado.
PS: Estou usando o Notepad++
Talvez você possa usar duas funções de pesquisa e substituição de regex? Um para tratar apenas linhas com comentário e o outro para tratar linhas com MsgBox. Isso deixaria o VBA regular sozinho. O primeiro padrão pode ser:
Substitua por
\n'
, veja a demonstração onlineO segundo:
Substitua por
" _\n & "
, veja a demonstração onlineUma análise dos princípios do padrão:
^
- Linha de partida âncora.[^']
- Corresponde a qualquer caractere, exceto uma aspa simples literal..*
- Corresponde a qualquer caractere diferente de zero de nova linha ou mais vezes.(*SKIP)(*F)
- Combinação Skip/Fail para consumir o padrão correspondente, mas negá-lo mais tarde.|
- Alternação/OU.(?:
- Abra o 1º grupo sem captura.(?:
- Abrir 2º grupo sem captura..{1,70}|.{71,140}|.{141,210}|.{211,280}
- Alternação para corresponder a qualquer caractere diferente de nova linha uma quantidade x de vezes. Você pode adicionar mais se os valores de string forem ainda mais longos.)
- Fechar o segundo grupo aninhado sem captura.|
- Alternação/OU.\G(?!^)
- Afirmar a posição no final da correspondência anterior com antecipação negativa para evitar o início da posição da string.)
- Fechar o 1º grupo sem captura.\S+
- Corresponder a pelo menos 1 caractere sem espaço em branco.\K
- Redefina o ponto de partida da partida relatada anteriormente.\h
- Corresponde a um caractere de espaço em branco horizontal.(?=.{25,}$)
- Antecipação positiva para garantir que haja pelo menos mais 25 caracteres até a âncora final da string (para evitar pequenas peças finais).Considerando que o padrão acima funcionaria para linhas destinadas a comentários. A única diferença com o segundo padrão é que ele usa um lookahead negativo para garantir que a linha não comece com o literal 'MsgBox('.
Meu resultado final: