VBA 코드를 80개 열로 포맷하는 방법은 무엇입니까?

VBA 코드를 80개 열로 포맷하는 방법은 무엇입니까?

줄이 길고 (100% 엄격하지는 않음) 80자로 제한되는 어딘가로 보내려는 VBA 코드가 있습니다.

_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

두 개의 정규식 검색 및 바꾸기 기능을 사용할 수 있을까요? 하나는 주석이 있는 줄만 처리하고 다른 하나는 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 & "온라인을 참조하세요.데모


패턴의 원리에 대한 분석:

  • ^- 라인 앵커를 시작합니다.
  • [^']- 리터럴 작은따옴표를 제외한 모든 문자를 일치시킵니다.
  • .*- 개행 문자 이외의 문자를 0회 이상 일치시킵니다.
  • (*SKIP)(*F)- 일치하는 패턴을 사용하지만 나중에 무효화하는 건너뛰기/실패 조합입니다.
  • |- 교대/또는.
  • (?:- 1차 비캡처 그룹을 오픈합니다.
    • (?:- 2차 비포획 그룹을 오픈합니다.
      • .{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=

관련 정보