Ext JS に関しては,新しい記事は Sunvisor Lab. ExtJS 別館 にあります。そちらもよろしくお願いいたします。
Accessを使ってVBの印刷プログラムを自動作成する
Visual Basicの印刷機能のふがいなさは、みなさんご存じの通りです。MS-Accessのレポート機能の強力さもみなさんご存じの通り。沢山の帳票を出力するような場合には、MS-Accessを使うという方も多いと思います。
ところがクライアントに配布するプログラムの場合、Accessがインストールされていないなどの理由で、Visual Basicで作成せざるを得ない場合があります。そしてそのプログラムで帳票を打たなければならない「あぁAccessのレポートが使えたらなぁ」と思い ますよね。
Accessのレポートの良さは、デザインが簡単に行えることです。そこで、Accessでレポートを作成し、それからVisual Basicの印刷プログラムを生成できないか?と考えて作ったのがこのプログラムです。
ただし、Accessのレポート機能をすべて使えるわけではありません。どちらかというとVisual Basicのプログラミングを少しだけ助けるようなツールです。
できること
- Accessレポートの詳細セクションに配置したコントロールから描画ルーチン(Procedure)を自動作成します。
- 自動作成したProcedureは、専用のクラスとととにVisual Basicプロジェクトに読み込めば、印刷ルーチンが完成します。
- 出力先はObject型なので、Printerオブジェクトを指定して印刷することも、Pictureオブジェクトを指定して、プレビューを作ることもできます。
- ソースは完全公開ですので、ご自分ですきなようにカスタマイズできます。
- クライアントプログラムの配布先にはAccessがインストールされている必要はありません。
できないこと
- Accessのようにレコードセットと連携して、詳細セクションを繰り返したり、ヘッダーセクションを印刷したりはできません。そのあたりはコーディングで対応する必要があります。
ダウンロードするファイルの中身
ダウンロードするファイルは、GenGraphic.lzh です。+Lhacaなどで解凍してください。2つのファイルが出てきます。
GenGraphic.mdb
描画プログラムを作成するmdbです。このmdb上でレポートを作成し、そのレポートを元に描画プログラムを自動作成します。
CDrawGraphic.cls
生成された描画プログラムが利用するクラスです。生成されたプログラムと一緒に、Visual Basicのプロジェクトにインポートして使います。
使い方
GenGraphic.mdbを起動します。
表示されるフォームの「新規レポート」ボタンを押して、GenGraphic.mdbの中でレポートをデザインしてください。使えるコントロール は、ラベル・テキストボックス・矩形・線の4種類のみです。他のコントロールを配置しても、それに関するコードは生成されません。
線・矩形
Visual BasicのLineメソッドで描画コードを生成します。線の太さや種類もなるべく近いもので描画されるようにコードが作られます。
ラベル
Visual BasicのPrintメソッドでコントロールの標題(Caption)プロパティの値を文字列として描画するコードを生成します。データによって変更のない文字列描画する時に使います。
テキストボックス
Visual BasicのPrintメソッドで、コントロールソース(ControlSource)に設定した式を描画するコードを生成します。変数名でも計算式でも 何でもここに記述したとおりのコードが生成されます。何でもここに記述したとおりになると言うことは、ここに記述した式にエラーがあったら、そのまんまエ ラーになってしまうということでもあります。
ラベル・テキストボックスで使用できるプロパティ
フォント名・フォントサイズ・斜体・太字・下線・左余白・右余白・上余白・文字配置は、描画するコードに設定が反映されます。文字配置は左・右・中央・均等すべて対応しています。行間隔はサポートされません。
またテキストボックスの場合、書式(Format)プロパティの値は、Visual Basic の Format関数の第2引数になります。この値を設定することで、簡単に描画文字列のフォーマットを指定できます。
例)txtDate テキストボックスの「書式」プロパティに 'ggge年m月d日' と設定されていたなら、「平成X年X月X日」と表示されます。
線・矩形・ラベル・テキストボックスで使用できるプロパティ
境界線スタイル・境界線色・境界線幅の各プロパティが描画するコードに反映されます。
矩形・ラベル・テキストボックスで使用できるプロパティ
背景スタイル・背景色の各プロパティが描画するコードに反映されます。Accessのデフォルトでは、テキストボックスの背景スタイルが「普通」に なっていますが、そのままでは背景色で矩形を描画するコードが生成されます。背景色を指定する必要のないコントロールの背景スタイルは「透明」にすること をお勧めします。
レポートのデザインが済んだなら、レポートを保存します。フォームのリストボックスに今作ったレポート名が表示されますので、それを選択後出力するファイル名と描画ルーチンのProcedure名を入力して、プログラム作成ボタンを押すと、プログラムが作成されます。
ラベルコントロールの特殊な使用法
ラベルコントロールのタグプロパティに Param と設定することで、生成されるProcedureが受け取る引数を定義することができます。タグ(Tag)プロパティにPramと設定し、標題 (Caption)プロパティに引数の定義を書きます。例えば Param1 As String の様にVisual Basicの引数定義の文字列を書きます。すると、作成されるProcedureは、
Sub foo(objOutput as Object, Param1 As String)
のように定義されます。印刷ルーチンには沢山のデータを渡さなければならないと思います。その場合は、ユーザー定義型やクラスを渡すようにしてはど うでしょうか。例えば、印刷必要なデータを格納しているクラス CPrintData がある場合、Param指定で、PrData As CPrintData という引数を受け取るようにします。そして、コントロールボックスのコントロールソースプロパティでは、そのクラスのプロパティを印刷するように指定しま す。 PrData.UserName などのように記述するのです。
作成時のオプション
プログラム作成時にいくつかのオプションを選択できます。
- Procedureの宣言をPrivateにするかPublicにするか
- コントロール名をコードの中にコメントとして入れるかどうか
作成した描画ルーチンの呼び出し
Visual Basicのプロジェクトを開いて、作成したファイルとCDrawGraphic.clsファイルをインポートします。インポートされた描画ファイルのモジュール名は、手続き名の頭にmdlをつけたものになります。
印刷を実行したいところに、生成したProcedureをコールするコードを書けば印刷機能を使うことができます。Param指定がない場合のProcedure仕様は次のようになります。
Public Sub 関数名(objOutput as Object,, Optional lTopMargin As Long = 0, _ Optional lLeftMargin As Long = 0)
引数
- objOutput:描画先のオブジェクト、PrinterオブジェクトやPictureBoxオブジェクトを渡します。
- lTopMargin:ページの上端からのマージンをTwips単位で指定します(省略可能)
- lLeftMargin:同様に左端からのマージンを指定します(省略可能)
Param指定がある場合は、objOutputとlTopMarginの間にParam指定した引数が入ります。
例)手続き名がPrintOutの場合
PrintOut Printer,720,720 または Call PrintOut(Printer,720,720)
例)手続き名がPrintOutでPramを2つ指定している場合
PrintOut Printer, Pram1, Param2, 720, 720
著作権・改造・再配布など
GenGraphic.mdb CDrawGraphic.clsともに著作権は、Sunvisor Lab.にあります。
プログラムの改造は自由に行ってくださって結構です。便利な改造を行っていただけたら、フィードバックして頂くとなお結構です。
再配布もご自由にどうぞ。
ご意見なども聞かせてください。
トラックバック
添付 | サイズ |
---|---|
ダウンロードはこちらから | 121.86 KB |