先週の日曜日は、ビジネスITアカデミーさん で「Wordマクロ マクロの記録徹底活用法! 」セミナーを担当させていただきました。
ご受講いただきました皆様、どうもありがとうございました。
マクロの記録はおもしろいですね。
当日も、いろんなアイディアをいただきまして、「こいうことができます」「これはどうですか?」という対話をもとに方法を試してみました。
私の提案した方法が回答ではなく、仕事の現場の条件で最適解は変わると思います。
完璧なマクロではなく、その場で問題解決できるマクロを目指して、お試しいただけたらと思います。
Wordファイルって時々不可解(笑)
実は、先日のセミナー中に、受講生の1人から提案いただいた方法でマクロを実行したら、デモファイルでエラーが出ました。
マクロ自体は正しいのに実行結果が伴わない、という状況でした。
セミナー中は、ファイルの解析・マクロの解析には時間をかけすぎず、私が持ち帰って昨日検証しました。
そしたらファイルが若干おかしなことに気がつきました。
なんと、見えないセクションが区切りが挿入されていたのです!
実はこのファイル、以前のセミナーのお客様が業務でどうにかしたい、ということで送ってきたファイルの内容を変えて実習ファイルにしたものです。(セミナーで使うことのご許可はいただいています)
このファイルはその方の会社のシステムが生成したWordファイルです。
おそらく、これが原因でおかしなWordファイルになったのかも、と感じています。
この手の事例はよくあるみたいですね。壊れたファイルに対してマクロを実行すると予想外の結果になってしまうので、あまり驚かずに対処したいですね。
完璧を目指さず、業務を進める
こういうことって実務でありますね。
理論上できるはずなことがうまくいっていない場合、理由はいくつかあると思います。
- 理論が間違っている
- そもそもVBAのバグ
- 対象ファイルが特殊
探求心が刺激されてしまい、いろいろ調べたくなるところですが、私たちの仕事は目の前の業務を十分な品質で期限までに仕上げることです。
今回のケースでは、エラーがでて終了して問題ないマクロですから、そのまま業務を続けていいと思います。
完璧にループを回さなくてもいいかもしれませんね。目で見て確認できるのであれば、それでいいと思います。
あと、マクロの記録で作った使い捨てマクロですから、こだわりすぎないことが大切だと思います。
汎用性を高めるのは、こういう使い捨てのマクロがたまってきた頃だと思います。具体例が複数集まれば、上位の概念を特定して汎用性のあるマクロを作れます。
でも、1つだけの事例では汎用性は高めるためにいろんな想像をしなくてはならず、時間の無駄になりかねません。(でも、考えたくなりますよねー)
このあたりの心のバランス(笑)をとりながら仕事していきたいですね。
受講生の皆様へ
昨日、セミナーのまとめファイルをお送りしました。新しく出たトピックのまとめや、私が口頭でお答えした部分の補足説明をしました。
今後の業務でぶつかった課題を私にいただけたら、どのように進めたらいいか一緒に考えさせていただきますので、ご連絡ください。
コメント
1. 見えないゴミ!
私も、目に見えないゴミに悩まされたことがあります。インターネット上の表形式のデータをコピーして、
Wordに貼り付けしたのですが、
各データ1件を一行一段落にずらりと並べておき、
マクロで一段落ごとに処理しようとしたのですが、
なぜかマクロがうまく動かず、原因がわかりませんでした。(これは、縦に並べた外国語の一つの単語を一行ごとに並べておき、
CSV形式の辞書ファイルからADOで日本語の訳語を呼び出し、
単語の後ろに書き出しする処理でした。
自分用の紙製辞典を手作業なしで作るものです。)しかしながら、データをいじる途中で不審な点があり、
○データをトリプルクリックすると、なぜか一段落だけでなく、文書全体を選択した状態になる。
○改行マークの後ろをクリックすると、なぜか改行マーク(段落記号)の前ではなく、
改行マークの後ろ1文字目にカーソルが移動する。このことから、改行マークの後ろに
1文字の見えないゴミがあることが判りましたので、
マクロの記録を使って、ショートカットキーで一回操作した後、
For~Nextコマンドを追加して、これを実行し、
見えないゴミを削除しました。下記は、その当時の応急用のマクロ:
Sub MyBdmDelete()
Rem *----*----* *----*----* *----*----* *----*----*
Rem ゴミ文字削除処理
Rem *----*----* *----*----* *----*----* *----*----*
'
Dim i As Long
'
For i = 1 To 1000 ' 繰り返す回数を指定して処理を実行する。
Selection.EndKey Unit:=wdLine ' 行の末尾にカーソル移動。
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend ' 末尾の1文字選択。
Selection.TypeParagraph ' 改行を入力。(ゴミ削除+次行へ移動。)
Next ' i
'
MsgBox "End!"
End Sub ' MyBdmDelete *----*----* *----*----* *----*----* *----*----*H. C. Shinopy 2014-09-06 19:52:59
2. Re:見えないゴミ!
>H. C. Shinopyさんいつもコメントをどうもありがとうございます!
私もこの変な改行というか段落記号に惑わされたことがありました。
Wordが認識する「段落」という概念を説明するときに、セミナーで意図的におかしな段落を作ってデモをしています。
このおかしな段落記号は置換をしても削除できます。
どうぞお試しください。新田順也☆ワードプログラマー 2014-09-08 09:01:23