シリーズ仕様書からプログラムソースを生成する方法のつづきです。
いままで、hina1.txtからout1.txtを書き出すという1つのものしかやっていませんでした。
しかし、実際には、たとえば、BREWのソースコードを出す場合には、いくつものファイルを出力しないといけません(それに対応するいくつもの雛型もあります)。
どーしましょう。っていうお話です。
■方針
作業用にシートを作ります。
そのシートは、対象となる雛型ファイル名、仕様書シート名、出力先ファイル名が書いてあります。
そして、ボタンが押されたとき行う作業である、shiyoToFile()で、このシートを読み込み、順次、makefileを呼び出して、ファイルを作成していきます。
なお、実際には、上記作業用シートを自動生成したり、その他の処理をしないといけないケースがあるので、作業前処理、後処理を追加し、それを別モジュール(別マクロファイル)としておきます。
■作業用シート
上記にかいた、対象となる雛型ファイル名、仕様書シート名、出力先ファイル名が書いてある作業用シートは、以下のような形です。
ここに、今回は、手書きで、雛型ファイル名、仕様書シート名、出力先ファイル名を入力しました(が、場合によっては、このシートを自動的に編集するというケースのほうが、多いかと思います)
■修正プログラム
ボタンが押されたとき動くサブルーチン、shiyoToFile()を、以下のように修正します。
Public outdata As String Public lpstr_pos As Integer Public lpgyo As Integer Public Const sagyo_shname As String = "作業一覧" Public Const sagyo_str_gyo As Integer = 5 Public Const sagyo_hina_keta As String = "A" Public Const sagyo_sh_keta As String = "B" Public Const sagyo_out_keta As String = "C" Sub shiyoToFile() Dim gyo As Integer Dim hina_name As String Dim sh_name As String Dim out_name As String '//================================// '// 開始時の前処理(固有処理) // '//================================// Call initAppData '//================================// '// 作業一覧に基づき出力(共通処理)// '//================================// gyo = sagyo_str_gyo Do While Sheets(sagyo_shname).Range(sagyo_hina_keta & CStr(gyo)) <> "" hina_name = Sheets(sagyo_shname).Range(sagyo_hina_keta & CStr(gyo)) sh_name = Sheets(sagyo_shname).Range(sagyo_sh_keta & CStr(gyo)) out_name = Sheets(sagyo_shname).Range(sagyo_out_keta & CStr(gyo)) Call makefile(hina_name, sh_name, out_name) gyo = gyo + 1 Loop '//================================// '// 終了時の後処理(固有処理) // '//================================// Call freeAppData MsgBox "終わりました" End Sub |
(上記 < > ¥は、本当は半角。以下省略)
で、先ほどの「場合によっては、このシートを自動的に編集するというケース」などでは、initAppDataでその内容を記述することになります。また、余計なシートを作った場合は、上記ソース中の freeAppDataで削除することになります。
この、前処理initAppDataと後処理freeAppDataは、後述するように、別モジュールとして作ります。
■前処理、後処理
前処理initAppDataと後処理freeAppDataは、
・まず、ここの3に書かれている方法で、標準モジュールを追加します。
・そして、下の図のように、オブジェクト名を変えると名前がかわるので、
いままで、shiyoToFile()とかをかいていたモジュールのオブジェクト名を標準処理、
今回作ったほうを、ユーザー作成部分とします。
・そして、下の図の右側に書かれているように、前処理initAppDataと後処理freeAppDataの
サブルーチンを書きます。
今回は何も処理しないので、なにも書かなくていいです。
これであとは、作業一覧に追加すれば、処理をどんどんやるようになります。
今回はここまで。