2017-03-26 11 views
1

私は形状オブジェクトを持っていて、私はどんな方法でも2つの文字列間のテキストを削除したい。 は、例えば:2つの文字列の間のテキストを削除するオブジェクトvba word

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

私はオランウータンのテキストを持っている: "父ajgfhdgh aghdashdgsgh sdfyghudsdghkshgfy dgvssdfhyv gdfysdfv gfdsdfv母を"。

父と母の間のすべての単語を削除します。 どうすればいいですか?この質問は、文字列操作についてですと利便性のための形状とは何の関係もありませんので

おかげで、

タル

+0

instr()を使用して2つのキーワードの位置を特定し、Left()、Right()、Mid()の組み合わせを使用して文字列を分割することができます。その後、連結演算子(&)を使用して、中間部分を残して物事を戻します。これらの機能については、VBAのドキュメントを参照してください。 –

答えて

0

は私がstrという変数と結果にあるように、入力文字列を仮定しますコンソールに出力されます。必要に応じて調整します。

基本的に2つのアプローチがあります。最初は、文字列の一部を取得するために、文字列にし、LeftMid検索する組み込み関数InStrを使用しています。

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は以下のように、(また、詳細についてはhttps://stackoverflow.com/a/22542835を参照)を使用することができるRegExpクラス提供:これは、第1および第2のコンテンツに入力された文字列を置換し

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を使用して、それの特定の部分をフォーマットする場合は、形状の各単一のテキスト文字を表しTextRangeCharacterプロパティを使用する必要があります。これで、それらの文字オブジェクトを使用して、目的のフォーマットを割り当てることができます。

詳細についてはhttps://msdn.microsoft.com/de-de/library/office/ff743845.aspxを参照してください(このドキュメントはPowerPoint向けですが、Wordでも同様です)。

+0

こんにちは、 それは私が見ることができるデバッグをチェックすると、テキストから削除しますが、ドキュメント内のオブジェクトを更新しません(私はコードを実行した後に変更を見ることができません)。 –

+0

結果を形状に戻そうとしましたか? – Leviathan

+0

suggetというコードでテキストを削除すると成功しました。私は新しいテキストを入れます: ActiveDocument.Shapes(1).TextFrame.TextRange。テキスト= newTextShape。 しかし、それはまた、形状オブジェクトのデザインを削除しています(デザインはフォント、セクションをセクションに...)。 私はfind関数で使う必要があると思いますが、私はそれをすることを知らないのです。 –

関連する問題