同じコードでもキーワードに着色されているだけで、ずいぶん見やすくなる。
しかし残念なことに、VBエディタの印刷機能ではソースコードをカラー印刷できない。
コピーしてWordに張り付けても、元がただのテキストなので黒一色になってしまう。
そこで今回は、キーワードを自動判別して着色してくれるWordマクロを作成してみた。
Sub KeyWordsHighLight() Dim p As Range For Each p In ActiveDocument.Words Dim Keyword As Variant For Each Keyword In Split( _ "And Append As Assert Base Binary ByRef ByVal Call Case " & _ "Compare Declare Debug Dim Do DoEvents Each Else ElseIf Empty " & _ "End Error Exit Explicit False For Friend Function Get GoSub " & _ "GoTo If In Input Is Let Lock Loop New Next Not Nothing Null Open " & _ "Option Optional Output Or On ParamArray Print Private Private Property " & _ "Public Random Read Resume Seek Select Set Shared Static Static Step " & _ "Sub Then To True With WithEvents Write Xor") If Trim(p.Text) = Keyword Then On Error Resume Next 'Select文と、Range("A1").SelectのSelectが両方キーワード扱いになるため、 '前の文字がドットなら除外。ただし、Debug.PrintとDebug.Assertは例外。 If Not p.Previous(WdUnits.wdCharacter, 1).Text = "." Or _ Trim(p.Text) = "Print" Or _ Trim(p.Text) = "Assert" Then p.Select Selection.Font.ColorIndex = wdBlue End If On Error GoTo 0 End If Next Next End Sub
コードはやっつけ仕事なので色々と粗が目立つ。
特にソースコード中にコメントを書いた部分の処理は本当はもっとスマートなやり方があるはずだけれど、面倒くさかったので強引にIf文で判定させた。
実行するとこのとおり、キーワードが青色に着色される。
このマクロは文字列の中にある単語もキーワード判定するので注意。
したがって、上記コードをWordの本文に張り付けて、マクロを実行すると、以下のように文字列中のキーワードが真っ青になってしまう。
まあ、メタプログラミング系を扱わなければ、だいたいうまく動作するし、個別の色は少しくらいWordで手直ししてもたかだかしれているのでこれで良しとする。