我想使用段落中的字符串在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
这种方式有效。任何人都知道清理一串这样的角色的更好方法吗?
答案 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 拉丁字母,数字,空格,点和连字符将被替换/删除。
这两种方法各有利弊,但我认为主要原因是:
这是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