[英]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.