タイトル | : Replace:=Word.WdReplace.wdReplaceOneを入れるとFind.Executeの検出位置が変わります |
記事No | : 9416 |
投稿日 | : 2009/09/22(Tue) 20:33 |
投稿者 | : camputer |
こんばんは、いつも行き詰った時に勉強させていただいております。camputerと申します。 プログラム歴10年(うちVB.NET歴約1年)です。 開発環境はXP+Word2003+VB2008になります。 質問させていただきます。どうぞよろしくお願いいたします。
Word文書の置換において、 まず一度検索実行して( Find.Execute() )から、その後に @「検索継続」のみするか( Find.Execute() )、 A「検索継続+置換をする」か(Find.Execute(Replace:=Word.WdReplace.wdReplaceOne) )を 選択したいのですが、@とAで何故か検出位置が異なっております。 Word文書の 「aaa aaa」(←Word文書の1行1文字目から2行3文字目) で「a」の検索を下のコードで実行いたしますと、 Find.Execute()の場合だとメッセージボックスが 「a/0」 「b/0」 「c/1」 となるのに対し、Find.Execute(Replace:=Word.WdReplace.wdReplaceOne)の場合だと 「a/0」 「b/0」 「c/4」 となり、Word文書の1行目をすべて飛ばして2行1文字目の「a」が1番に 検出されてしまいます。。。
(長くなりますが,宣言文も載せさせていただきます) Dim mywd As New Word.Application Dim myDocs As Word.Documents = mywd.Documents Dim myDoc As Word.Document = myDocs.Open("C:\Test.doc") : : Dim mywdApp As Word.Application = mywd.Application Dim mywdAppSele As Word.Selection = mywdApp.Selection Dim mywdAppSeleFind As Word.Find = mywdAppSele.Find Dim mywdAppSeleFindRep As Word.Replacement = mywdAppSeleFind.Replacement mywdAppSeleFind.ClearFormatting() mywdAppSeleFindRep.ClearFormatting() MRComObject(mywdAppSeleFindRep) mywdAppSele.WholeStory() With mywdAppSele.Find .Text = "a" .Replacement.Text = "z" .Forward = True .Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue .Format = False .MatchCase = True .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With
MsgBox("a" & "/" & mywdAppSele.Start) mywdAppSeleFind.Execute() MsgBox("b" & "/" & mywdAppSele.Start)
'mywdAppSeleFind.Execute() '←@ ↓A 問題の2行でございます mywdAppSeleFind.Execute(Replace:=Word.WdReplace.wdReplaceOne) MsgBox("c" & "/" & mywdAppSele.Start)
色々とテストいたしましたところ、1文字目に検索対象がある時のみ起こる現象のようで、 「baa aaa」 を検索いたしますと、どちらのコードでも 「a/0」 「b/1」 「c/1」 となり、同じ検索を実行することができます。
いつもは検索で引っかかったコードや引数などを,自分で手当たり次第変更したり, 多数のサンプルを作って試すことで原因を掴むのですが,本案件につきましては 解決に至りませんでした。。。原因が想像つきません。。 何か怪しそうなところを御指摘・アドバイスいただけないでしょうか。 何卒よろしくお願いいたします。
|