繁体   English   中英

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

[英]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搜索字符串,使用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第一个和第二个括号的内容,因此省略其间的所有内容。 请注意保留字符.*+?()[]{}^$\\必须使用反斜杠\\进行转义,如果它们应出现在firstWordsecondWord 如果输入字符串中有换行符,请查看https://superuser.com/q/399381


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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM