書きためたVBAマクロをだす その1 Word 箇条書き番号テキスト化
職場でWordとかExcelとかをよくつかっていて、それなりにマクロを書きためている。のだが、管理がずさんなため、いつか一度かいたはずのコードがいざというときに出てこなくてあたふたすることがよくある。このままだと、この状況は一向によくならない。そこで、ブログに出すと同時にGithubのレポに上げるようにすれば、記憶とコードの整理が一挙にできてよいのではないかと思いいたった。
第一回は、Wordの箇条書き記号(・とか1. 2. 3..とか)を素のテキストに変換するマクロを紹介したい。紹介するというか、たくさんのところで使われている処理ではある。しかしこのコードは、テキスト変換処理を複数のドキュメントに適用できるようにじゃっかんの拡張をほどこしてある。これは章ごとにファイルが別けられているケースなので便利だと思う。たとえば20ファイルあったときに、20回マクロを実行するのは、それなりに骨が折れるのだ。
コード
メインルーチンとサブルーチンにわける。メインでどのサブルーチンを実行させるかを、ユーザーインプットに応じて分岐させる。サブルーチンの種類というのは、処理範囲を単独ないしはすべてのドキュメントのどちらにするかという選択にもとづいておこなう。
メインルーチン
かんたんにinputboxに1とか2とかを入力することで、範囲を指定できるようにする。
Sub 箇条書き番号テキスト化() Dim f f = InputBox("箇条書き番号をテキスト化します。処理範囲を指定してください。1=現在の文書、2=すべての文書") If f = "" Then MsgBox "キャンセルしました", vbOKOnly + vbInformation Exit Sub End If Select Case f Case 1 Call ConvertNumbersToTextSingleDocument Case 2 Call ConvertNumbersToTextAllDocuments End Select End Sub
サブルーチン
全ドキュメントを処理するばあいは、ドキュメントのオブジェクト変数をループさせる。それ以外は、どっちも同じで、単純にコピペしている。 Lst.ConvertNumbersToTextが箇条書き記号を素のテキストに変換するVBAの組み込みメソッドだ。
Private Sub ConvertNumbersToTextAllDocuments() Dim Lst As List Dim doc As Document For Each doc In Documents For Each Lst In doc.Lists Lst.ConvertNumbersToText Next Lst Next doc MsgBox "完了", vbOKOnly + vbInformation End Sub Private Sub ConvertNumbersToTextSingleDocument() Dim Lst As List For Each Lst In ActiveDocument.Lists Lst.ConvertNumbersToText Next Lst MsgBox "完了", vbOKOnly + vbInformation End Sub
基本的に、これでだいたいうまくいくはず。 Githubへのアップはまた今度やる。