ACCESS レポートの画像を動的に変更する方法

レポートの画像を動的に変更する方法

ACCESSでレポートを作成した際、請求書や納品書であれば担当者の印鑑を入れたい、というケースもあるでしょう。

レポートに印鑑の画像データを入れれば、表示することは可能ですが、担当者別にレポートを作っておくのは面倒です。

そうした場合に、担当者情報に合わせて、自動的にレポートで表示する画像を切り替えることができれば便利だと思いませんか。

ACCESSでは、テキストや数値はテーブルの値に基づいてレポートに反映させるのは簡単ですが、画像データを動的に変更させるのはちょっとコツが必要です。

今回は、レポートの画像を動的に変更する方法をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSで実際に作成したフォームやレポートを、その作成方法と共にご紹介していきます。

完成形

初めに完成形を示します。

以下は、請求書を発行するACCESSデータベースです。

請求書発行画面で選択した担当者に応じて、請求書に印字される担当印(画像データ)を動的に変更します。

例えば、担当者で「はこにわ」を選択した場合は以下。

担当者に「ガジェット」を選択すると同じ請求書でも画像が変わります。

ACCESSでは、テキストや数値はテーブルの値に基づいてレポートに反映させるのは簡単ですが、画像データを動的に変更させるのはちょっとコツが必要です。

以降、この機能の作成方法をご紹介します。

テーブルの設定

今回は、請求書発行などの仕組みはある程度できている前提で進めます。

担当印データは、担当者ごとに変えるので、担当者情報を格納しているテーブルの設定を変更します。

ここでは、MST_担当というテーブルです。

こちらのテーブルに、印鑑データを指定するためのフィールドを作成します。

「印鑑データ」というテキスト型のフィールドを追加しました。

フォームの設定

続いてフォームの設定です。

こちらも請求書発行のフォームは事前に作ってある前提です。

請求書発行をする際の担当者を選択できるように、プルダウンを追加します。

プルダウン(コンボボックス)の作成方法が不明な方は下記の記事を参照ください。

テーブルを元にコンボボックスを作る方法

今回は、MST_担当を値集合ソースにして、担当IDというプルダウンをフォームに設置しました。

レポートの設定

レポートには、担当印を表示するためのコントロールを配置します。

イメージの取り込み

まずは、担当印に使用するデータをACCESSに取り込みましょう。

ACCESSのレポートをデザインビューで開き、「イメージの挿入」を選択します。

挿入するイメージを確認されますので、エクスプローラーで選択します。

無事に取り込みができると、先ほどのイメージの挿入ボタンを押した際に、画像が表示されるようになります。

この際、画像についている名称は取り込んだファイル名です。

この画像の名称は後程使用しますので、わかりやすい名称をファイルにつけておくか、取り込み後に変更してください。

担当印を表示するコントロールを配置

次に、動的に変化する担当印を表示するコントロールをレポートに配置します。

同じくレポートのデザインビューから「レポートデザイン」→「イメージ」を選択しましょう。

どのイメージファイルを挿入するか聞かれますが、ここではキャンセルします。

すると、画像と紐づいていないイメージコントロールが作成されます。

このコントロールに、先ほど取り込んだイメージデータを動的に割り当てていきます。

このコントロールはVBAで指定しますので、名前はわかりやすいものに変更しておいてください。

担当者テーブルにイメージデータ名を設定

次に、最初に作成した担当者テーブルの「印鑑データ」フィールドに、先ほど取り込んだ印鑑のイメージデータ名を設定します。

ここでの設定値を使って、レポート上の画像を呼び出しますので、名前を間違えないように設定ください。

プロシージャの作成

これで事前準備は整いました。

いよいよ、VBAを使って請求書に担当印を動的に表示させるプロシージャを作成していきましょう。

担当者ID引き渡し用変数の宣言

最初に、変数の設定です。

請求書発行画面から請求レポートに担当者IDを引き渡す必要があるので、そのための変数を設定します。


Public tantou_id As Long

Publicで宣言することをお忘れなく。

この変数は、複数のオブジェクトで使用しますので、クラスオブジェクトではなく標準モジュール(Module1など)に作成してください。

請求書発行処理時に担当者IDを変数に格納

次に、請求書発行フォームでの発行処理を変更します。

請求書発行ボタンを押した際に、担当者IDを先ほど作成したtantou_idに格納します。

請求書発行フォームの請求書印刷ボタンのイベントプロシージャを開きます。

レポートを開く処理の前に、担当者IDを格納する処理を追加します。

赤枠部分が今回追記した箇所です。


tantou_id = Me!担当ID

その他の箇所は請求書レポートを表示するための既存の処理なので気にしないでください。
ただし、Docmd.OpenReport(レポートを開く処理)より前に、変数格納の処理を入れてください。

請求書レポートを読み込み時に担当印を設定

最後に、請求書レポート側の読み込み時イベントで、tantou_idの値から担当印イメージデータを設定する処理を作成しましょう。

以下のプロシージャを設定します。


Private Sub Report_Load()

If tantou_id <> 0 Then

    If IsNull(DLookup("印鑑データ", "MST_担当", "担当ID =" & tantou_id)) = False Then
    
         Me!担当印.Picture = DLookup("印鑑データ", "MST_担当", "担当ID =" & tantou_id)

    Else
    
        Me!担当印.Picture = ""
    
    End If

Else

    Me!担当印.Picture = ""

End If

End Sub

If文で複雑になっていますが、基本処理は以下の1文のみです。


Me!担当印.Picture = DLookup("印鑑データ", "MST_担当", "担当ID =" & tantou_id)

レポート上の担当印コントロールのPictureプロパティに、DLookup関数を使って、MST_担当テーブルに指定したイメージデータを読み込ませます。

その他は、エラー処理のためのルーチンです。

担当IDが設定されていない場合や、MST_担当テーブルに印鑑データが設定されていない場合にエラーが出ないように処理しています。

この設定を行うことで、フォームで指定した変数の値に基づいて、レポート上の画像を変更することができます。

以上、レポートの画像を動的に変更する方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。