2017-03-26 41 views
1

我有形狀對象,我想以任何方式刪除兩個字符串之間的文本。 例如: -刪除形狀對象vba中的兩個字符串之間的文本字

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

我有文字紅毛: 「父親ajgfhdgh aghdashdgsgh sdfyghudsdghkshgfy dgvssdfhyv gdfysdfv gfdsdfv母親」。

我想刪除父親與母親之間的所有單詞。 我該怎麼做?

感謝,

塔爾

+0

您可以使用instr()來定位兩個關鍵詞的位置,然後使用Left(),Right()和/或Mid()的組合來將字符串分解成幾部分。然後使用連接運算符(&)將事物放回到一起,而忽略中間部分。查看這些函數的VBA文檔。 –

回答

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 

另一種方式來處理,這是使用正則表達式。它們功能更強大,可以以非常緊湊的方式執行復雜的字符串操作。 圖書館微軟VBScript中的正則表達式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)。

+0

嗨, 它從文本中刪除(當我檢查調試我可以看到),但不更新文檔中的對象(我看不到更改後,我運行代碼)。 –

+0

你有沒有嘗試把結果放回形狀? – Leviathan

+0

我成功刪除了您使用的代碼,並將新文本刪除: ActiveDocument.Shapes(1).TextFrame.TextRange。Text = newTextShape。 但它也刪除了形狀對象的設計(設計意味着字體,劃分爲部分...)。 我認爲我需要使用查找功能,但我不知道這樣做。 –

相關問題