[英]delete text between two string in shape object vba word
我有形状对象,我想以任何方式删除两个字符串之间的文本。 例如:
Dim oRang As RangeSet oRang = ActiveDocument.Shapes(1).TextFrame.TextRange
Const firstWord = "father"
const secondWord = "mother"
我在oRang有文字:“父亲ajgfhdgh aghdashdgsgh sdfyghudsdghkshgfy dgvssdfhyv gdfysdfv gfdsdfv mother”。
我想删除父母之间的所有单词。 我怎样才能做到这一点?
谢谢,
塔尔
由于这个问题是关于字符串操作的,并且为方便起见与形状没有任何关系,我将假设输入字符串位于一个名为str
的变量中,并将结果输出到控制台。 根据需要调整。
基本上有两种方法。 第一个使用内置函数 InStr
搜索字符串,使用Left
和Mid
来检索字符串的一部分:
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格式化其某些部分,则必须使用TextRange
的Character
属性来表示形状中的每个单个文本字符。 现在,您可以使用这些字符对象分配所需的格式。
有关详细信息,请参阅https://msdn.microsoft.com/de-de/library/office/ff743845.aspx (尽管该文档适用于PowerPoint,但我认为它也适用于Word)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.