【Word VBA】一括置換による翻訳にて原文データを見ながら翻訳する(その3)

これまで、ぱらぱら原文データを見ながら翻訳するためのマクロ 原文データを見ながら翻訳するためのマクロ(その2) をご紹介させていただきました。

先日いただいた以下のコメントの通り、文章中に表があるとうまく動作しません。

マクロを公開していただき、誠に有り難うございます。この記事のマクロを是非、翻訳に有効利用させていただきたいと思っています。
さっそく自分のワード(ワード2000)で、マクロを実行してみたところ、
「実行時エラー ‘4605’
オブジェクトにより表の最終行が参照されているためメソッドまたはプロパティが使用できません」
と警告がでて、「終了」を押すと(「継続」というボタンは押せない状態になっています)そこから先へは作業を進めることができず、原文もそこで尻切れになってしまいます。
私は、マクロのことを知らないので、回避策を見つけることができないでいます。
表はその都度、無視するとかでもいいので、なんとか最後までこのマクロを作動させる方法はないでしょうか。
一方的に勝手な希望で誠に申し訳ありませんが、もし何かご教示頂けることがあればと思い、失礼ながらコメントさせていただきます。

お試しをいただき、かつご指摘をどうもありがとうございました。

いろいろと対策は考えてマクロを作っているのですが、あまり検証していないのでまだ公開できません。

ひとまずは、エラーがあっても先に進むおまじないをいれたマクロをご紹介します。

このマクロでできること

一括置換翻訳の支援ソフト「ぱらぱら」 用のマクロです。

原文データを見ながら翻訳するためのマクロ と同じことをします。

段落ごとに隠し文字を挿入する段階で、エラーが発生しても先に進むマクロです。

マクロの解説

エラーがあっても、ひたすら突き進むおまじないです。

On Error Resume Next

見習いたいものです。失敗を恐れずにチャレンジしたいですね(笑)。

といいつつも、マクロの場合は、あまり多用しないほうがいいですね。

何らかのエラーにより、段落を無視してしまうとか、文字列を無視してしまうとか、そういうこともありえます。そんな状況は怖いですよね。

具体的なエラーの原因を突き止めてそれを事前に回避したり、エラーが発生したときに具体的な処理をしたほうがいいですね。

今回は、検証する手間を省いて、22行目~32行目のように場合分けをして、エラーの種類を特定して対処するようにしてみました。

エラーが4605が出たときには、表の最終行を参照しているのでコピーメソッドでエラーがでているようです。

でも、この場合は無視をして次に行くように考えて、clearメソッドにてエラーをリセット(Err.Numberをゼロ→正常状態にする)して次に進んでいます。

これ以外のエラーが出たときには、エラー番号を表示するようにしていますので、みなさんの案件でエラーがでたらそれを追加していけばいいですね。

そううすれば、重大なエラーを取り逃さずにマクロを使えると思います。

マクロ


Sub 上書き翻訳用のデータ作成マクロ_エラー回避()

 Dim myDoc As Document
 Dim orgDoc As Document
 Dim myParaNum As Long
 Dim i As Long
 Dim myPosition As Long

 'エラーがあっても先に進む
 On Error Resume Next

 Set orgDoc = ActiveDocument
 Set myDoc = Documents.Add

 myParaNum = orgDoc.Paragraphs.Count

 Application.ScreenUpdating = False

 For i = 1 To myParaNum
  orgDoc.Paragraphs(i).Range.Copy

  Select Case Err.Number
   Case 4605
    '表の最終行が参照される場合には無視する
    Err.Clear
   Case 0
    'エラーが発生していないので何もしない
   Case Else
    MsgBox Err.Number & ":" & vbCr & Err.Description & vbCr & _
        "エラーが発生しました。終了します"
    Exit Sub
  End Select

  With Selection
   '貼り付け
   myPosition = .Start
   .Paste
   .Start = myPosition
   With .Font
    .ColorIndex = wdBlue
    .Hidden = True
   End With
   .Collapse direction:=wdCollapseEnd
   '貼り付け
   .Font.ColorIndex = wdAuto
   .Paste
  End With

 Next i

 Selection.HomeKey Unit:=wdStory

 Set orgDoc = Nothing
 Set myDoc = Nothing

 Application.ScreenUpdating = True

End Sub

コメント

  • 2. Re:ありがとうございます

    丸太郎さん、

    どうぞご利用ください。

    表は崩れますけど、ここはご容赦を。

    ぱらぱらもご利用をどうもありがとうございます。

  • 1. ありがとうございます
    お忙しいところ、本文もよく読まずにコメントした私の勝手なお願いに、このようにご丁寧に対処していただき、自分で要望しておきながら、今さらながらに恐縮しています。
    早速、昨日エラーが出たものと同じ原文に新しいマクロを適用してみました。ちゃんと最後まで処理が進んで、感激しました。ありがとうございます。
    今回の原文は、表が8個と比較的少なかったので、手作業での削除も問題ありませんでしたが、時には数百頁にわたって何十もの表が含まれている案件もあるので、そのような場合は別途対策を立てなければならないなと思っていました。しかしお陰様で、とりあえず、その必要もなくなりました。
    表組みは一時的に崩れるようですが、事前に表を削除して再び表を書き戻す手間と比べれば、翻訳後の成形はずっと楽だろうと思います。
    ほんとに有難うございました。
    Google検索のマクロも愛用させて頂いています。
    「ぱらぱら」を含めて、自分の作業に、より一層活用できるように勉強させて頂きます。
    丸太郎
トップへ戻る