« Baby Care Report ~今更、発熱の原因が分かったよーな気が・・・編~ | トップページ | Baby Care Report ~「HAPPY HUG モデル」の小冊子を貰ってみた編~ »

2008年7月26日 (土)

VB6からMS-Accessのレポートを印字する方法

下記の様なコーディングでMDB内に収められているレポートを開いて印刷を行えます。

もちろん実行するにはMS-Accessの実行環境は必要です。
また、コーディング例はMS-Accessで定義された定数を参照しているので、VB6のプロジェクトの参照設定にMS-AccessのObject Libraryを追加する必要があります。

Dim objAccess   As Access.Application

'MDBファイルを開き、Access.Applicationオブジェクトを取得
Set objAccess = GetObject("MDBファイル名")

'印刷を実施して、その後Accessを終了
objAccess.DoCmd.OpenReport "レポート名", acViewNormal
objAccess.Quit

'オブジェクトを開放
Set objAccess = Nothing

要するにAccess.Applicationオブジェクトを通して、MS-AccessのVBAと同じ操作をしているだけだったりします。

ちなみに、プリンタ設定は弄っていませんので、レポート側の印刷設定に依存する事になります。

また、OpenReportメソッドの第3引数(FilterName)では使用するクエリを、第4引数(WhereCondition)ではレコードソースに対するSQLのWHERE句を指定できるのでVB側からの条件指定も可能だったりします。

更に印刷ではなくプレビューの方が良いって場合は下記の様になります。

Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Private Const SW_MAXIMIZE = 3

Private Sub Command1_Click()

    Dim objAccess   As Access.Application
   
    'ファイルを開き、Access.Applicationオブジェクトを取得
    Set objAccess = GetObject("MDBファイル名")
   
    'プレビュー実行&最大化
    objAccess.DoCmd.OpenReport "レポート名", acViewPreview
    objAccess.DoCmd.Maximize
   
    'Accessのメインウィンドウを表示&最大化
    objAccess.Visible = True
    Call ShowWindow(objAccess.hWndAccessApp, SW_MAXIMIZE)
   
    'オブジェクトを開放
    Set objAccess = Nothing

End Sub

印刷と異なり、objAccess.Visible = Trueで、MS-Accessのメインウィンドウを表示しないとプレビューは画面上に表示されませんし、objAccess.Quitを実行しちゃうとMS-Accessが終了しちゃうので注意してください。

また、objAccess.DoCmd.Maximizeでレポートのプレビューウィンドウを最大化しています。

ちなみにMS-Accessのメインウィンドウも最大化する場合は、上記例の様にWindowsのAPIのShowWindow関数を使う必要があります。

ただ、MS-Accessのメインウィンドウを表示してから最大化するためウィンドウがウニョウニョ動くのが見えちゃうのはスマートじゃないんですが、ShowWindow関数より先にobjAccess.Visible = Trueをやらないとプレビューウィンドウが表示されない現象を確認したため、このよーなコーディングになっています。

|

« Baby Care Report ~今更、発熱の原因が分かったよーな気が・・・編~ | トップページ | Baby Care Report ~「HAPPY HUG モデル」の小冊子を貰ってみた編~ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/26493/22549927

この記事へのトラックバック一覧です: VB6からMS-Accessのレポートを印字する方法:

« Baby Care Report ~今更、発熱の原因が分かったよーな気が・・・編~ | トップページ | Baby Care Report ~「HAPPY HUG モデル」の小冊子を貰ってみた編~ »