私はこの機能を使用して、ワードドキュメントのアクセスからいくつかの文字列を置き換えています。この機能はかなりよくVBAで "with"句の厄介な問題
Sub reemplazar(doc As Word.Document, after As String, before As String, replaceall As Boolean)
With doc.Content.Find
.Text = after
.Replacement.Text = before
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
If replaceall Then
.Execute replace:=wdReplaceAll
Else
.Execute replace:=wdReplaceOne
End If
End With
End Sub
に動作します。しかし、私はそれが動作を停止し、このように機能を書き換える場合は...私は理由を知りません。エラーや警告はありませんが、交換は行われません。
Sub reemplazar(doc As Word.Document, after As String, before As String, replaceall As Boolean)
doc.Content.Find.Text = after
doc.Content.Find.Replacement.Text = before
With doc.Content.Find
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
If replaceall Then
.Execute replace:=wdReplaceAll
Else
.Execute replace:=wdReplaceOne
End If
End With
End Sub
この2つのスニペットの違いは何ですか?また、2つ目のスニペットの違いは説明できますか? ありがとう!
正しい答えの原因と回答コード。 2番目のコードスニペットの問題を列挙していることを明確にする必要があります。 – jpinto3912
私はあなたが正しいと確信していますが、プロパティにアクセスするたびに新しいオブジェクトが作成されることは非常に嫌です。 – Vicky
@Vicky ugh、Findメソッドの戻り値に厳密に型指定されたオブジェクトを初期化していないという事実が、Findメソッドがオブジェクトを返すことを意味する場合、実際はそうではありません。 2つの異なる暗黙的に型指定されたオブジェクトのプロパティ値が、お互いの間で状態を維持することを期待しています。 –