Re[16]:MinGW + Eclipse CDT

年度末の追い込みでご出勤。本日のお仕事には

200画面キャプチャしてWordで作った文書に貼り付ける

というのがある。機械的な作業だし、某くんにお願い。ちょっと経ってから見に行くと、

  1. マウス・キーボードを操作して画面を出す
  2. その画面をキャプチャしてペイントに貼り付け→名前を付けて保存
  3. それをWordへ貼付け

と全て手作業。それ200回繰り返す気か?しかもWordの貼付け位置が思い取りにならなくて、なんか四苦八苦している。あのさー、先に貼り付けるスペースを改行で確保して、図を挿入/貼り付る形式=「前面」にしときゃいいんじゃねーの?┐(´д`)┌ヤレヤレ

ということで自分でやる。まず画面表示は表示用スクリプトを書けば済む話。キャプチャはSnapCrab for Windowsみたいなソフト使えば一瞬だろ。Wordへの貼付けは、とりあえず左上のボタンから[Wordのオプション]-[詳細設定]で「図を挿入/貼り付る形式」を「前面」にしとけばWordのマクロでできるんじゃね?もともとWord上に貼り付ける画像ファイルのパスが記載されているんだから簡単だと思うけど...。ということで作ってみた。とりあえずマクロでやりたい操作を記録させる。

Sub Macro1()
    '  記録されたマクロ
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    Selection.Copy
    Selection.MoveDown Unit:=wdLine, Count:=1
    With ActiveDocument.Shapes.AddPicture(Anchor:=Selection.Range, FileName:= _
        "C:\temp\Tulips.jpg", LinkToFile:=False, SaveWithDocument:=True)
        .WrapFormat.Type = 3
        .ZOrder 4
    End With
    Selection.MoveUp Unit:=wdLine, Count:=1
End Sub

なるほど。FileNameに設定する部分がリテラルになるのね。ここをなんとかすればいいわけだ。で、次のようにしてみた。

FileName:=Selection.Text

ふみゅ~。結果はNG。ファイルが見つからないとな。調べてみると原因は2つ。

  • Selection.EndKey Unit:=wdLine, Extend:=wdExtendでは段落記号まで取り込まれている
    • 行末まで選択した後、カーソル移動で選択範囲を1文字分短くする操作を入れる
  • Selection.Textは明示的にString型に変換しなきゃいけない
    • String型変数経由でFileNameへ代入する。

変更後は次の通り。これでやりたい事はできる。

Sub Macro1x()
    '  ワーク用のString型変数 
    Dim fname As String
    '    ファイルパス行全体を選択
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend

    '   選択範囲から段落記号を外す(選択範囲を1文字分短くする)
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend

    '    選択されている文字列をString型変数へ代入
    fname = Selection.Text
    Selection.MoveDown Unit:=wdLine, Count:=1
    '    ファイルから画像を貼り付ける
    With ActiveDocument.Shapes.AddPicture(Anchor:=Selection.Range _
        , FileName:=fname _
        , LinkToFile:=False, SaveWithDocument:=True)
        .WrapFormat.Type = 3
        .ZOrder 4
    End With
    Selection.MoveUp Unit:=wdLine, Count:=1

    '    下の3行も実行すると元からあるファイルパスも消せる
    'Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    'Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    'Selection.TypeBackspace
End Sub

このマクロを適当なキー(Ctrl+Shift+Lとか)にアサイン。これでカーソルを取り込む画像ファイル名が記載されてある行の先頭に持って行って、そこでマクロを割りつけたキーを押せば一瞬で貼付け完了

f:id:kktworks:20120325124716p:image:w640

f:id:kktworks:20120325124425p:image:w640

作業時間を比較するとこんな感じかな。

作業名すべて手作業(某くん)ツール+マクロ
画面を表示させる10秒2秒
画面をファイルへ保存 20秒 2秒
ファイルをWordへ貼付け20秒2秒
1画面当たり 50秒6秒
200画面合計2時間47分20分

実際には

  1. 某くんに限らず、人間はこういう作業を機械のように計算どおりきっちりできるはずがない。操作ミス、割り込み、飽きた、疲れた、一服してくるw、などで実際はこの1.5倍と見込むべきだろ。そう考えると5時間以上かかる。
  2. 一方マクロ作成時間は30分。画面表示スクリプトの作成時間は5分。こちらも作業時間が計算値の1.5倍かかるとして、合計65分(実際そんなもんだったな)。5倍の生産性。しかもこのマクロは他でも使える。

極端に言えば1日対1時間。まぁ一事が万事で、みなこの調子だからねぇ~。上手く、安く、速くこなすにはどうすればいいか?を考えて、取り入れていけば、中国は無理としても、まだ対抗できるところはあると思うけど、某くんばかりではどうにもならん。だからここは早晩淘汰されるだろう。どうやって巻き込まれないようにすべきか?それが問題だ。