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.にあります。

プログラムの改造は自由に行ってくださって結構です。便利な改造を行っていただけたら、フィードバックして頂くとなお結構です。

再配布もご自由にどうぞ。

ご意見なども聞かせてください。

トラックバック


URL から "-MoIyadayo" を削除してトラックバックを送信してください。
トラックバックは承認後に表示されます。
添付サイズ
ダウンロードはこちらから121.86 KB