【コード】一括置換による翻訳にて原文データを見ながら翻訳する(その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

トップへ戻る