删除形状对象vba字中两个字符串之间的文本

时间:2017-03-26 12:31:45

标签: vba word-vba

我有形状对象,我想以任何方式删除两个字符串之间的文本。 e.g:

Dim oRang As RangeSet oRang = ActiveDocument.Shapes(1).TextFrame.TextRange
Const firstWord = "father"
const secondWord = "mother"

我在oRang有文字:"父亲ajgfhdgh aghdashdgsgh sdfyghudsdghkshgfy dgvssdfhyv gdfysdfv gfdsdfv mother"。

我想删除父母之间的所有单词。 我怎么能这样做?

谢谢,

塔尔

1 个答案:

答案 0 :(得分:0)

由于这个问题是关于字符串操作的,并且为方便起见并没有与形状有任何关系,我将假设输入字符串位于一个名为str的变量中,并将结果输出到控制台。根据需要进行调整。

基本上有两种方法。第一个使用内置函数 InStr来搜索字符串,LeftMid来检索字符串的一部分:

Dim firstWordLocation As Long
Dim secondWordLocation As Long

firstWordLocation = InStr(str, firstWord)
secondWordLocation = InStr(str, secondWord)
If firstWordLocation > 0 And secondWordLocation > 0 Then
    Debug.Print Left(str, firstWordLocation + Len(firstWord) - 1) & Mid(str, secondWordLocation)
End If

另一种解决方法是使用正则表达式。它们功能更强大,可以以非常紧凑的方式执行复杂的字符串操作。 库 Microsoft VBScript Regular Expressions 5.5 提供了一个RegExp类,可以按如下方式使用(有关详细信息,请参阅https://stackoverflow.com/a/22542835):

Dim regex As New VBScript_RegExp_55.RegExp

regex.Pattern = "(.*?" & firstWord & ").*?(" & secondWord & ".*)"
Debug.Print regex.Replace(str, "$1$2")

这将输入字符串替换为Pattern中第一个和第二个括号的内容,因此省略了它们之间的所有内容。 请注意,如果保留字符.*+?()[]{}^$\出现在\firstWord中,则必须使用反斜杠secondWord对其进行转义。 如果输入字符串中有换行符,则应查看https://superuser.com/q/399381

如果要将此字符串放回形状并使用VBA格式化其中的某些部分,则必须使用Character的{​​{1}}属性,该属性表示形状中的每个单个文本字符。现在,您可以使用这些字符对象分配所需的格式。

有关详细信息,请参阅https://msdn.microsoft.com/de-de/library/office/ff743845.aspx(尽管该文档适用于PowerPoint,但我认为它也适用于Word)。