Ich habe VBA-Code mit langen Zeilen und möchte ihn irgendwohin senden, wo die (nicht 100 % strikte) Begrenzung auf 80 Zeichen pro Zeile besteht.
VBA ermöglicht es, Zeilenumbrüche im Code zu erstellen, indem man _
vor " " ein enter
" setzt. (Das funktioniert natürlich nicht innerhalb von Strings, die in Teilstrings aufgeteilt und mit " &
" verbunden werden müssen. Wie Sie unten sehen können.)
Gibt es ein Tool, um automatisch „Zeilenumbrüche“ in den Code einzufügen?
Oder vielleicht reguläre Ausdrücke?
Ich habe versucht zu suchen, aber keine gültigen Ergebnisse.
Originalcode:
'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=
Gesuchter Code:
'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=
Danke.
PS: Ich verwende Notepad++
Antwort1
Vielleicht könnten Sie zwei Regex-Such- und Ersetzungsfunktionen verwenden? Eine, um nur Zeilen mit einem Kommentar zu verarbeiten, und die andere, um Zeilen mit einer MsgBox zu verarbeiten. Dadurch bliebe das reguläre VBA in Ruhe. Das erste Muster könnte sein:
^[^'].*(*SKIP)(*F)|(?:(?:.{1,70}|.{71,140}|.{141,210}|.{211,280})|\G(?!^))\S+\K\h(?=.{25,}$)
Ersetzen Sie durch \n'
, siehe onlineDemo
Der zweite:
^(?!MsgBox\().*(*SKIP)(*F)|(?:(?:.{1,70}|.{71,140}|.{141,210}|.{211,280})|\G(?!^))\S+\K\h(?=.{25,}$)
Ersetzen Sie durch " _\n & "
, siehe onlineDemo
Eine Aufschlüsselung der Prinzipien des Musters:
^
- Anker für die Startleine.[^']
- Übereinstimmung mit jedem Zeichen außer einem wörtlichen einfachen Anführungszeichen..*
- Jedes Zeichen außer dem Zeilenumbruch muss null- oder mehrmals übereinstimmen.(*SKIP)(*F)
- Überspringen/Fehlschlagen-Kombination, um das übereinstimmende Muster zu verwenden, es aber später zu negieren.|
- Abwechselnd/ODER.(?:
- Öffnen Sie die 1. Nichterfassungsgruppe.(?:
- Öffnen Sie die 2. Nichterfassungsgruppe..{1,70}|.{71,140}|.{141,210}|.{211,280}
- Alternation, um jedes Zeichen außer dem Zeilenumbruch x-mal abzugleichen. Sie können mehr hinzufügen, wenn Ihre Zeichenfolgenwerte noch länger sind.)
- Schließen Sie die verschachtelte zweite Nichterfassungsgruppe.
|
- Abwechselnd/ODER.\G(?!^)
- Position am Ende der vorherigen Übereinstimmung mit negativem Lookahead behaupten, um den Beginn der Zeichenfolgenposition zu verhindern.)
- Schließen Sie die erste Gruppe, die keine Erfassung vornimmt.
\S+
- Übereinstimmung mit mindestens 1 Zeichen, das kein Leerzeichen ist.\K
- Startpunkt des zuvor gemeldeten Spiels zurücksetzen.\h
- Passt auf ein horizontales Leerzeichen.(?=.{25,}$)
- Positiver Lookahead, um sicherzustellen, dass bis zum Endstring-Anker noch mindestens 25 Zeichen vorhanden sind (um kleine Endstücke zu vermeiden).
Wohingegen das obige Muster für Zeilen funktionieren würde, die als Kommentar gedacht sind. Der einzige Unterschied beim zweiten Muster besteht darin, dass es einen negativen Vorausblick verwendet, um sicherzustellen, dass die Zeile nicht wörtlich mit „MsgBox(“ beginnt.
Mein Endergebnis:
'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=