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 \-.]"
    

上述模式意味着所有BUT拉丁字母、数字、空格、点和连字符都将被替换/删除。

这两种方法各有利弊,但我认为主要原因是:

  1. 当目标是尽可能保留原始字符串时,应使用不允许的字符。
  2. 当名称不那么重要时,应使用允许的字符列表,但保存任何没有错误的文件是#1 目标。

这是 RegEx 使用的相关代码:

    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 回答