Accessのレポートに画像を埋め込み、レコードの値(フラグ)に合わせ、動的に画像の中身を動的に切り替える方法を解説しています。
やり方は2通りあり、
- 連結オブジェクトフレームを使用する方法
- イメージを使用する方法
があります。両方とも、レポート上に配置するコントロールの名称です。連結オブジェクトフレームはテーブルに格納したイメージやOLEオブジェクトを表示させるものですが、Microsoftのオンラインドキュメントが分かりにくかったため、手順をまとめました(メモ代わりでもあります)。イメージコントロールは、Accessの外部にある画像ファイルを指定するのに使用できます。
連結オブジェクトフレームを使用する方法
公式サイトの引用ですが、「連結オブジェクトフレーム」は以下の用途で使用します。
連結オブジェクト フレーム オブジェクトを使うと、Access データベースのテーブルに格納されたピクチャ、グラフ、または OLE オブジェクトを表示することができます。 たとえば、テーブルに格納した社員のピクチャを、連結オブジェクト フレームを使ってフォームやレポートに表示することができます。
BoundObjectFrame オブジェクト (Access)
要するに、テーブル内のオブジェクトをが対象のようです。
早速、作り方を具体的に示します。
まずは、ビットマップイメージを格納したテーブルを用意
今回は、フラグを見て女性と男性の画像を切り替えて表示するレポートを作ってみます。画像を格納するテーブルは、「table1」とし、画像を入れる列のデータ型は「OLEオブジェクト型」にします。
画像は、以下のものを使いました(いらすとやさんから)。
ペイントで開き、コピー&ペーストで貼りつけます。セルの内容が「Bitmap Image」になるはずです(ファイルをドラッグ&ドロップする方法ではできないので注意)。
次に、レポートに表示させるデータを用意します。「data1」としました。「sex」列に区分を格納します。
「data1」にデータを入れます。”1″が女性、”2″が男性。
これで、とりあえずデータの準備は完了。
レポートを作成
新規でレポートを作成し、「連結オブジェクトフレーム」を貼り付けます。また、「sex」の値を入れる項目もテキストボックスで用意しておきます。ちなみに、隠し項目と画像では書いていますが、説明の便宜上、表示させています。
レポートのプロパティで、レコードソースに「data1」を指定。
テキストボックスのプロパティで、コントロールソースには「sex」を指定。
画像切り替えのロジックをVBAで記述
レポートの詳細のセクションをクリックして「イベント」タブの「印刷時」を、「イベントプロシージャ」にして「…」をクリックします。すると、Visual Basic Editorが立ち上がります。
VBAを以下のように書きます。連結オブジェクトフレーム(pic1)のValueプロパティに、OLEオブジェクトのデータ(ビットマップ)を、セットします。
Option Compare Database
Option Explicit
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
Dim female, male As Object
Dim db As DAO.database
Dim rst As DAO.Recordset
'table1データ取得
Set db = CurrentDb
Set rst = db.OpenRecordset("table1")
'画像取得
rst.MoveFirst
Set female = rst!girl
Set male = rst!boy
'連結オブジェクトフレームにセット
Select Case Me.txt1.Value
Case "1"
Me.pic1.Value = female
Case "2"
Me.pic1.Value = male
End Select
End Sub
うまくできてると、「印刷プレビュー」で以下のように表示されるはずです。ちゃんと、画像が切り替え表示されていますね。
/archive2019/archive2019/archive2019以上が、テーブルのデータに画像を入れて、それ参照する方法です。この方法のメリットとしては、外部にデータを用意しなくていいので、Accessファイル単体だけを更新するだけで済みます。外部に必要なファイルを用意しなくていいので、単純な構成にできます。本番環境のファイルを更新する際、画像ファイルをコピーし忘れていた…などという、ありがちなミスを防げるかもしれません。
イメージを使う方法(画像ファイルのパスを指定する)
Access外部に要してある画像ファイルを、パスを指定することで表示させる方法もあります。イメージというコントロールを使います。
/archive2019/archive2019/archive2019レポートへの配置の方法は、ほぼ同じです。違うのが、コントロールを貼り付けた後、ダイアログで読込む画像を聞かれます。が、これは無視してOKなので、「×」を押します(初期表示させる場合はここで指定しても良い)。
VBは以下の通りにします。Pictureプロパティに、文字列で画像ファイルのパスをセットします。img1は、イメージのコントロール名です。
Option Compare Database
Option Explicit
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
'連結オブジェクトフレームにセット
Select Case Me.txt1.Value
Case "1"
Me.img1.Picture = "G:\work\sex\girl.png"
Case "2"
Me.img1.Picture = "G:\work\sex\boy.png"
End Select
End Sub
うまくできると、以下のようになるはずです(画像の色が変なのは縮小したせいです…)。
/archive2019/archive2019/archive2019参考サイト
・BoundObjectFrame オブジェクト (Access)
・Image オブジェクト (Access)
以上です。