VB2010 で Access レポートを印刷したい人向け|実務で使える最適な方法

Visual Basic

・はじめに(きっかけ)

先日、Microsoft Access をデータベースとして利用している
VB2010(Visual Basic 2010)Windowsアプリケーションをお使いのお客様から、機能追加のご依頼をいただきました。

内容は、
「入金情報を登録したタイミングで、Access で作成した領収書レポートを自動印刷したい」
というものです。

この記事では、その際に実装した VB2010 から Access レポートを印刷する方法 をまとめています。
同じような仕組みを作りたい方の参考になれば幸いです。
(この記事は約5分ぐらいで読めます)

・今回のプログラムでできること

  • VB2010 のフォームに入力した値を検索条件にして、Access レポートの特定行だけを印刷できます
  • Access 側で作成済みのレポートをそのまま利用できます
  • Where 条件を使うことで、1件だけの印刷にも対応できます
  • ※フォーム側のコードは割愛しています。

・VB2010 から Access レポートを印刷するコード例

以下は、実際に使用したプロシージャです。
Access.Application を利用してレポートを開き、Where 条件で特定レコードのみ印刷します。

Public Sub receipt_print()

        'Access経由で請求書の印刷
        ' 変数の宣言
        Dim objAccess As Object
        Dim findkey As String
        Dim setmno As Integer
    Dim Access_PATH As String
        
        'Access(データベースの保存場所)
     Access_PATH = "C:\WindowsApplication\データベース名.accdb"

        '顧客管理番号(Mno)の取得
        setmno = TextBox.text(フォームに設置しているテキストボックスやリストボックスの入力値をセット)

        'Accessを起動する
        objAccess = CreateObject("Access.Application")
        findkey = "テーブル名.顧客管理番号=" & setmno & " AND テーブル名.日付=#" & DateTimePicker.Value.Date(フォームで入力した値) & "#"

        With objAccess
            .OpenCurrentDatabase(filePath:=Access_PATH)
            .DoCmd.OpenReport(ReportName:="Accessのレポート名", WhereCondition:=findkey)
        End With

        ' Accessを終了する
        objAccess.quit()
        objAccess = Nothing
        Me.Cursor = Cursors.Default
        MsgBox("領収書を出力しました。", vbInformation)

    End Sub

・コードのポイント解説

● Access.Application を使って Access を操作

VB2010 から Access を直接操作するためのオブジェクトです。

● DoCmd.OpenReport の WhereCondition を活用

特定レコードだけ印刷したい場合は、Where 条件が非常に便利です。

例:

"ID=123 AND 日付=#2024/01/01#"

● 日付条件は # で囲む必要がある

Access の SQL 仕様に合わせています。

● 後処理(Quit)は必須

Access を閉じないとプロセスが残るため、必ず Quit()Nothing を実行します。

・参考資料

DoCmd.OpenReport メソッド (Access)

OpenReport メソッドは、Visual Basic で “OpenReport/レポートを開く” アクションを実行します。

DoCmd.OpenReport メソッド (Access) | Microsoft Learn

・まとめ

今回は、VB2010 のプログラムから Access レポートを印刷する方法をご紹介しました。

  • Access.Application を使って Access を起動
  • DoCmd.OpenReport でレポートを開く
  • Where 条件で特定レコードのみ印刷
  • 後処理(Quit)は必ず実施

Access レポートは VBA でも VB.NET でも利用できるため、
既存システムの改修や VB6 → VB2010 移行時にも役立つ方法です。

少しでも参考になれば幸いです。
ここまでご覧いただき、誠にありがとうございます。

・ご注意(免責事項

・掲載されている内容には細心の注意をしてるつもりですが、
間違いやご指摘等がありましたら、「お問い合わせ」からご連絡をいただけますと幸いです。
・掲載されている入力VBプログラム等は動作を保証するものではなく、あくまでサンプルとして掲載しております。
・掲載されているVBプログラム等は自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
・対応バージョン
 Microsoft Access 2019
 Microsoft Visual Studio 2010 Professional

コメント