使用range.text在visual basic中创建目录

时间:2013-01-19 08:22:10

标签: vba

我想使用段落中的字符串在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 

这种方式有效。任何人都知道清理一串这样的角色的更好方法吗?

1 个答案:

答案 0 :(得分:2)

更一般地说,你需要执行清理并从字符串中删除不允许的字符,这将是文件夹名称。一旦我在类似的情况下遇到同样的麻烦 - 使用Subjects作为名称从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. 当名称不那么重要时,应使用
  3. 允许的字符列表,但保存没有错误的任何文件是第一目标。
  4. 这是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将使用定义的替换字符串替换所有匹配的字符。在我的情况下,它是"" - 空字符串,这意味着字符被丢弃。将其替换为任何东西(当然,这些也必须允许用于文件夹名称字符 - 例如使用_)。

    详细了解RegEx:http://www.jose.it-berater.org/scripting/regexp/regular_expression_syntax.htm

相关问题