VBA コードを 80 列にフォーマットするにはどうすればよいですか?

VBA コードを 80 列にフォーマットするにはどうすればよいですか?

行が長い VBA コードがいくつかあり、それをどこかに送信したいのですが、行の制限は 80 文字 (100% 厳密ではありません) ですか。

_VBA では、" " の前に" " を配置することで、コード行を分割enterできます。(明らかに、これは文字列内では機能しません。文字列はサブ文字列に分割され、" " で接続される必要があります&。以下を参照してください。)

コードに「改行」を自動的に追加するツールはありますか?
あるいは正規表現でしょうか?

検索してみましたが、有効な結果は見つかりませんでした。

元のコード:

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

必要なコード:

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

ありがとう。

追記:私はNotepad++を使っています

答え1

おそらく、正規表現の検索と置換の関数を 2 つ使用できるでしょう。1 つはコメント行のみを処理し、もう 1 つは MsgBox 行を処理します。これにより、通常の VBA はそのまま残ります。最初のパターンは次のようになります。

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

に置き換えて\n'、オンラインを参照してくださいデモ


2番目:

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

に置き換えて" _\n & "、オンラインを参照してくださいデモ


パターンの原則の内訳:

  • ^- スタートラインアンカー。
  • [^']- リテラルな一重引用符以外の任意の文字に一致します。
  • .*- 改行以外の任意の文字を 0 回以上一致します。
  • (*SKIP)(*F)- 一致したパターンを消費し、後でそれを否定するための Skip/Fail の組み合わせ。
  • |- 交替/OR。
  • (?:- 最初の非キャプチャ グループを開きます。
    • (?:- 2 番目の非キャプチャ グループを開きます。
      • .{1,70}|.{71,140}|.{141,210}|.{211,280}- 改行以外の任意の文字を x 回一致させる交替。文字列値がさらに長い場合は、さらに追加できます。
      • )- ネストされた 2 番目の非キャプチャ グループを閉じます。
    • |- 交替/OR。
    • \G(?!^)- 文字列位置の開始を防ぐために、負の先読みを使用して前の一致の末尾に位置をアサートします。
    • )- 最初の非キャプチャグループを閉じます。
  • \S+- 少なくとも 1 つの空白以外の文字に一致します。
  • \K- 以前に報告された一致の開始点をリセットします。
  • \h- 水平の空白文字に一致します。
  • (?=.{25,}$)- 肯定的な先読みにより、終了文字列アンカーまで少なくともあと 25 文字あることを確認します (小さな末尾部分を防ぐため)。

一方、上記のパターンは、コメントとして意図された行には機能します。2 番目のパターンとの唯一の違いは、行がリテラル 'MsgBox()' で始まらないようにするために、否定の先読みを使用していることです。


ここに画像の説明を入力してください

私の最終結果:

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

関連情報