如何將VBA程式碼格式化為80列?

如何將VBA程式碼格式化為80列?

我有一些 VBA 程式碼,其中行很長,並且想將其發送到某處(不是 100% 嚴格)在線限制 80 個字元。

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

謝謝。

PS:我用的是Notepad++

答案1

也許您可以使用兩個正規表示式搜尋和替換功能?一個僅處理帶有註解的行,另一個將處理帶有 MsgBox 的行。這將讓常規的 VBA 不再受到影響。第一個模式可能是:

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

替換成\n',參見網上示範


第二個:

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

替換成" _\n & ",參見網上示範


模式原理的細分:

  • ^- 起始線錨。
  • [^']- 匹配除單引號之外的任何字元。
  • .*- 符合除換行符之外的任何字元零次或多次。
  • (*SKIP)(*F)- 跳過/失敗組合以消耗匹配的模式,但稍後將其否定。
  • |- 交替/或。
  • (?:- 開啟第一個非捕獲組。
    • (?:- 開啟第二個非捕獲組。
      • .{1,70}|.{71,140}|.{141,210}|.{211,280}- 交替匹配除換行符之外的任何字元 x 次。如果您的字串值更長,您可以添加更多。
      • )- 關閉嵌套的第二個非捕獲組。
    • |- 交替/或。
    • \G(?!^)- 在上一個符合結束時使用負前瞻斷言位置,以防止字串位置開始。
    • )- 關閉第一個非捕獲組。
  • \S+- 符合至少 1 個非空白字元。
  • \K- 重置先前報導的比賽的起點。
  • \h- 匹配水平空白字元。
  • (?=.{25,}$)- 正向前視,確保在結束字串錨點之前至少還有 25 個字元(以防止出現小尾段)。

而上面的模式適用於作為註解的行。與第二個模式的唯一區別是它使用負前瞻來確保該行不以文字「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=

相關內容