tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Replace:=Word.WdReplace.wdReplaceOneを入れるとFind.Executeの検出位置が変わります
投稿日: 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」
となり、同じ検索を実行することができます。

 いつもは検索で引っかかったコードや引数などを,自分で手当たり次第変更したり,
多数のサンプルを作って試すことで原因を掴むのですが,本案件につきましては
解決に至りませんでした。。。原因が想像つきません。。
何か怪しそうなところを御指摘・アドバイスいただけないでしょうか。
 何卒よろしくお願いいたします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。