0

段落の文字列を使用して Microsoft Word VB で新しいディレクトリを作成したかったのですが、それは段落全体でした。パス名エラーが発生したため、行末文字が含まれていたはずです。Mid を使用して、range.text から最後の文字を削除しました。ここにいくつかのコードがあります

Sub newDir()
    'Take the text in a paragraph selected by index and create a folder
    'MkDir ("C:\MainFolder\" & Mid(ActiveDocument.Paragraphs(2).Range.Text, 1, Len(ActiveDocument.Paragraphs(2).Range.Text) - 1))
End Sub 

この方法は機能します。そのような文字列をきれいにするより良い方法を知っている人はいますか?

4

1 に答える 1

2

より一般的に言えば、クリーンアップを実行し、フォルダー名になる文字列から許可されていない文字を削除する必要があります。同様の状況で同じ問題に直面したら、件名を名前として使用して Outlook から何百ものメールを保存します。以下は 2 つのアプローチで、どちらもRegExを使用します。

  • 次のパターンを使用して、許容できない文字のリストを作成します。

    RegX_NAChars.Pattern = "[\" & Chr(34) & "\!\@\#\$\%\^\&\*\(\)\=\+\|\[\]\{\}\`\'\;\:\<\>\?\/\,]"
    

Chr(34)は二重引用符です。明らかな理由から、直接リストすることはできません。特定のケースでは、リストにいわゆる「改行」文字を追加する必要があります"[start of pattern]" & "\" & Chr(10) & "\" & Chr(13) & "[rest of pattern]". パターン内の文字の順序は重要ではありません。

  • 反対のアプローチは、許可された文字のリストを宣言し、残りをすべて削除することです:

    RegX_NAChars.Pattern = "[^\w \-.]"
    

上記のパターンは、すべてのラテン文字、数字、スペース、ドット、およびハイフンが置換/削除されることを意味します。

どちらのアプローチにもそれぞれ長所と短所がありますが、主な理由は次のとおりだと思います。

  1. 元の文字列を可能な限り保持することが目標である場合は、許可されていない文字を使用する必要があります。
  2. 名前がそれほど重要でない場合は、許可された文字リストを使用する必要がありますが、エラーなしでファイルを保存することが最大の目標です。

これは、正規表現の使用に関連するコードです。

    Dim RegX_NAChars As Object

    Set RegX_NAChars = CreateObject("VBScript.RegExp")
    RegX_NAChars.Pattern = [**use any of the above**]
    RegX_NAChars.IgnoreCase = True
    RegX_NAChars.Global = True
    ........[**your code**]........
    RegX_NAChars.Replace(String_to_Cleanup, "")

RegX_NAChars.Replace上記は、一致するすべての文字を定義された置換文字列に置き換えます。私の場合、それ""は - 空の文字列です。これは、文字が破棄されることを意味します。それを何かに置き換えます(もちろん、これらはフォルダ名の文字にも許可されなければなりません-たとえば use _)。

正規表現の詳細: http://www.jose.it-berater.org/scripting/regexp/regular_expression_syntax.htm

于 2013-01-19T09:42:31.627 に答える