¿Cómo formatear el código VBA a 80 columnas?

¿Cómo formatear el código VBA a 80 columnas?

Tengo un código VBA donde las líneas son largas y quiero enviarlo a algún lugar, donde (no 100% estricto) hay un límite de 80 caracteres en línea.

VBA permite crear una línea de código dividida colocando " _" antes de " enter". (Obviamente, esto no funciona dentro de cadenas, que deben dividirse en subcadenas y conectarse con " &". Como puede ver a continuación).

¿Existe alguna herramienta para agregar "saltos de línea" al código automáticamente?
¿O tal vez expresiones regulares?

Intenté buscar, pero no hubo 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 buscado:

'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=

Gracias.

PD: estoy usando Notepad++

Respuesta1

¿Quizás podrías usar dos funciones de búsqueda y reemplazo de expresiones regulares? Uno solo manejará líneas con un comentario y el otro manejará líneas con un MsgBox. Esto dejaría en paz al VBA normal. El primer patrón podría ser:

^[^'].*(*SKIP)(*F)|(?:(?:.{1,70}|.{71,140}|.{141,210}|.{211,280})|\G(?!^))\S+\K\h(?=.{25,}$)

Reemplace con \n', consulte en líneamanifestación


El segundo:

^(?!MsgBox\().*(*SKIP)(*F)|(?:(?:.{1,70}|.{71,140}|.{141,210}|.{211,280})|\G(?!^))\S+\K\h(?=.{25,}$)

Reemplace con " _\n & ", consulte en líneamanifestación


Un desglose de los principios del patrón:

  • ^- Anclaje de línea de salida.
  • [^']- Coincide con cualquier carácter excepto una comilla simple literal.
  • .*- Haga coincidir cualquier carácter que no sea la nueva línea cero o más veces.
  • (*SKIP)(*F)- Combinación Saltar/Fallar para consumir el patrón coincidente pero negarlo más tarde.
  • |- Alternancia/O.
  • (?:- Abierto 1er grupo sin captura.
    • (?:- Abierto 2º grupo sin captura.
      • .{1,70}|.{71,140}|.{141,210}|.{211,280}- Alternancia para hacer coincidir cualquier carácter que no sea una nueva línea una x cantidad de veces. Podría agregar más si los valores de su cadena son aún más largos.
      • )- Cerrar el segundo grupo anidado sin captura.
    • |- Alternancia/O.
    • \G(?!^)- Afirmar la posición al final del partido anterior con anticipación negativa para evitar el inicio de la posición de la cuerda.
    • )- Cerrar el 1er grupo de no captura.
  • \S+- Coincide con al menos 1 carácter que no sea un espacio en blanco.
  • \K- Restablecer el punto de partida del partido informado anterior.
  • \h- Coincidir con un carácter de espacio en blanco horizontal.
  • (?=.{25,}$)- Búsqueda positiva hacia adelante para asegurarse de que haya al menos otros 25 caracteres hasta que se ancle la cadena final (para evitar pequeños extremos).

Mientras que el patrón anterior funcionaría para líneas destinadas a ser comentarios. La única diferencia con el segundo patrón es que utiliza una búsqueda anticipada negativa para asegurarse de que la línea no comience con el literal 'MsgBox('.


ingrese la descripción de la imagen aquí

Mi resultado final:

'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=

información relacionada