■ 欠品の商品を楕円で囲む (2000,2002,2003,2007)

図 欠品の商品の在庫数を丸で囲む
レポートに商品リストを印刷するとき、欠品の商品を丸で囲みます。このサンプルは、、在庫数が0のとき在庫数を楕円で囲んで目立つようにします。
1. 新規データベース作成
Accessを起動したら、ツールバーから新規作成のアイコン
をクリックして、作業フォルダworkにW166.mdbを作成します。
2. テーブル、クエリをインポート
Windowsのエクスプローラから、166.mdbをダブルクリックして開きます。データベースウィンドウのオブジェクトから[テーブル]をクリックしたら、商品テーブル(tblProducts)をドラッグしてW166.mdbのデータベースウィンドウにドロップします。同様の手順で、クエリ(qryProducts)をドラッグ&ドロップします。テーブル、クエリをインポートしたら、166.mdbを閉じます
3. 新規レポート作成
データベースウィンドウのオブジェクトから[レポート]をクリックしたら、[新規作成]ボタンをクリックします。「新しいレポート」のダイアログが表示されたら、リストボックスから[オートレポート:表形式]を選択します。基になるテーブルまたはクエリの選択から、[qryProducts]を選択したら[OK]ボタンをクリックします。レポートのプレビューが表示されたら、ツールバーからデザインビューのアイコン
をクリックします。レポートヘッダーのラベルをクリックして入力モードに切り替えたら、ラベルの標題を「商品リスト」に書き換えます。

図 オートレポートでレポート作成
4. コードビューに切り替えてイベント登録
ツールバーからコードのアイコン
をクリックしてVBEを表示します。コードビューが表示されたらOption Explicitの直後に、次のイベントとプロシージャを追加します。(イベントプロシージャは、ドロップダウンリストからオブジェクトとプロシージャを選択すると自動生成されますので、手入力する必要ありません。)
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
Const TWIP = 567
Dim sngX As Single
Dim sngY As Single
Dim sngRadius As Single
With Me
If .UnitsInStock = 0 Then
sngX = 15.5 * TWIP
sngY = .ScaleHeight / 2
sngRadius = .ScaleHeight / 2
.FillColor = 9685503
.FillStyle = 0
Me.Circle (sngX, sngY), sngRadius, , , , 0.8
End If
End With
End Sub
5. 印刷プレビュー
VBEのツールバーから表示(Access)のアイコン
をクリックして、Accessのウィンドウに切り替えます。Accessのツールバーから印刷プレビューのアイコン
をクリックして確認します。印刷プレビューに商品リストが表示されたら、ページ移動ボタンをクリックしてページを移動します。商品の在庫数が0のとき、楕円で囲まれています。

図 欠品のとき在庫数が楕円で囲まれる
●解説
在庫数が0のとき「0」を楕円で囲むには、レポートのCircleメソッドを使用します。
書式
Circle(flags, X, Y, radius, color, start, end, aspect)
引数Xには、円の中心のx座標を指定します。引数Yには、円の中心のy座標を指定します。引数radiusには、円の半径を指定します。引数colorには、円の外周の色を指定します。引数start/endには、円の一部を描画するとき円弧の始点/終点を指定します。引数aspectには、円の縦横比を指定します。既定値は1.0です。
このサンプルでは、詳細セクションの印刷時/OnPrintイベントで在庫数を調べて、0ならCircleメソッドで楕円を描画します。楕円を塗りつぶすときは、レポートのFillColorとFillStyleプロパティを設定します。FillColorには、円の内部を塗りつぶす色を指定します。FillStyleには、円が透明、不透明、またはパターンで埋められるかを指定します。(0:塗りつぶし、1: 透明、・・・)
‘ 詳細セクションの印刷時のイベント
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
With Me
‘ 在庫数が0のとき以下の処理を行う
If .UnitsInStock = 0 Then
‘ 楕円の中心座標(x,y)を算出
sngX = 15.5 * TWIP
sngY = .ScaleHeight / 2
‘ 楕円の半径を算出
sngRadius = .ScaleHeight / 2
‘ 楕円を塗りつぶす色を指定
.FillColor = 9685503
.FillStyle = 0
‘ aspectに0.8を指定して楕円を描画する
Me.Circle (sngX, sngY), sngRadius, , , , 0.8
End If
End With
End Sub