none
Word2007での一括置換の高速化につきまして RRS feed

  • 質問

  • お世話になります.
    Word2007での一括置換について現在開発しております.
    一通り思い通りに動くように作れたのですが,速度が遅くて悩んでおります.
    現在,以下のような方法での置換を考えています.

    OS:Windows 7 32bit
    CPU等:Core i5,SSD
    辞書ファイル:Textデータ(UTF-16)
    辞書のレコード数:約4500
    必須の条件:Word上で変更履歴が表示される必要があります.

    現在,以下のコードで2ページ程度で30秒ほどかかります(画面やステータスバーの描画は止めています).
    置換を行う文書は,場合によっては100ページ程度になることもあり,現在の速度ではかなりストレスになります(また,固まることも多いです).
    速度は,10ページで10秒くらいになるのが理想です.

    Doでループさせる部分で時間がかかっているようなので,Dictinaryを使って速度の向上を試みたのですが,ExcelでDictinaryを配列に読み込ませるまではいいのですが,その後WordでどのようにDictionaryの内容で変換すればよいのかで躓いてしまいました.

    どなたか高速化についてご教示いただけないでしょうか.
    よろしくお願いいたします.

    Sub 用語リストでの置換()
     
        Const adSaveCreateOverWrite = 2
        Dim Src As Object
        Dim records As Variant
       
        Set Src = CreateObject("ADODB.Stream")
        Src.Type = 2
        Src.Open
        Src.Charset = "UTF-16"
        Src.LoadFromFile "C:用語変換_UTF16.txt"
       
        Do While Src.EOS = False
         records = Split(Src.ReadText(-2), vbTab) 
         With Selection.Find
          .ClearFormatting
          .Replacement.ClearFormatting
          .Text = records(3)
          .Replacement.Text = records(2)
          .Forward = True
          .Wrap = wdFindContinue
          .Format = False
          .MatchCase = True
          .MatchWholeWord = True
          .MatchByte = True
          .MatchAllWordForms = False
          .MatchSoundsLike = False
          .MatchWildcards = False
          .MatchFuzzy = True
          .Execute Replace:=wdReplaceAll
         End With
        Loop
     End Sub

    2014年8月25日 8:23