Accessテクニックのホームへ戻る

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

 

欠品の商品の在庫数を丸で囲む

 

レポートに商品リストを印刷するとき、欠品の商品を丸で囲みます。このサンプルは、、在庫数が0のとき在庫数を楕円で囲んで目立つようにします。

 

1. 新規データベース作成

Accessを起動したら、ツールバーから新規作成のアイコンをクリックして、作業フォルダworkW166.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メソッドで楕円を描画します。楕円を塗りつぶすときは、レポートのFillColorFillStyleプロパティを設定します。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

      aspect0.8を指定して楕円を描画する

      Me.Circle (sngX, sngY), sngRadius, , , , 0.8

    End If

  End With

End Sub

 

ダウンロード (166.lzh)