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