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

■ レポートのレイアウトを設定する (2002,2003,2007)

 

レポートのレイアウトを設定する

 

コンボボックスからレポートを選択してレポートのレイアウトを設定します。フォームのコンボボックスからレポートを選択すると、選択したレポートがプレビューモードで表示されます。さらに、レポートの行列、サイズ、印刷方向などのレイアウト情報が表示されます。レイアウト情報を変更したときは、[設定]ボタンをクリックしてレポートに反映します。

 

 

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

Accessを起動したら、ツールバーから新規作成のアイコンをクリックして、作業フォルダworkW175.mdbを作成します。

 

2. テーブル、クエリ、レポート、モジュールをインポート

Windowsのエクスプローラから、175.mdb(このページの最後からダウンロードできます)をダブルクリックして開きます。データベースウィンドウのオブジェクトから[テーブル]をクリックしたら、得意先テーブル(tblCustomers)をドラッグしてW175.mdbのデータベースウィンドウにドロップします。同様の手順で、クエリ(qryCustomers)、レポート(rptSample1, rptSample2, rptSample3)、モジュール(basHelper)をドラッグ&ドロップします。テーブル、クエリ、レポート、モジュールがインポートされたら、175.mdbを閉じます。

 

3. 新規フォーム作成

データベースウィンドウのオブジェクトから[フォーム]をクリックして、右側の新規オブジェクトのショートカットから[デザインビューでフォームを作成する]をダブルクリックします。フォームのデザインビューが表示されたら、ツールボックスのコントロールウィザード無効になっていることを確認します。

 

ツールボックスからコンボボックステキストボックス四角形ラベルオプショングループコマンドボタンをクリックしたら、図のようにフォームの詳細セクションに作成します。ツールバーからプロパティのアイコンをクリックして、プロパティウィンドウを表示したら、表のようにプロパティを設定します。

 

フォームにコンボボックス、テキストボックスなどのコントロールを作成する

 

 

フォームとフォームに作成したコントロールのプロパティ

コントロールの種類

プロパティ

フォーム

ポップアップ

はい

コンボボックス

名前

cboReports

値集合タイプ

値リスト

ラベル1

標題

行列設定

背景色

16777215()

四角形1

立体表示

枠囲み

テキストボックス1(列数)

名前

txtItemsAcross

テキストボックス2(行間隔)

名前

txtRowSpacing

テキストボックス3(列間隔)

名前

txtColumnSpacing

ラベル2

標題

サイズ

背景色

16777215()

四角形2

立体表示

枠囲み

テキストボックス4(幅)

名前

txtItemSizeWidth

テキストボックス5(高さ)

名前

txtItemSizeHeight

チェックボックス(詳細セクションの幅/高さ適用)

名前

chkDefaultSize

オプショングループ(印刷方向)

名前

fraItemLayout

オプションボタン

オプション1

左から右へ

1953

オプション2

上から下へ

1954

 

 

コマンドボタン

標題

cmdUpdate

 

4. コードビューに切り替えてイベント登録

ツールバーからコードのアイコンをクリックしてVBEを表示します。コードビューが表示されたらOption Explicitの直後に、次のイベントとプロシージャを追加します。(イベントプロシージャは、ドロップダウンリストからオブジェクトプロシージャを選択すると自動生成されますので、手入力する必要ありません。)

 

Private mstrReport As String

 

Private Sub Form_Load()

  fsFillReportList Me.cboReports

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

  If Len(mstrReport) Then

    DoCmd.Close acReport, mstrReport

  End If

End Sub

 

Private Sub cboReports_AfterUpdate()

  If Len(mstrReport) Then

    DoCmd.Close acReport, mstrReport

  End If

  mstrReport = Me.cboReports.Value

  DoCmd.OpenReport mstrReport, View:=acViewPreview

  With Reports(mstrReport).Printer

    Me.txtItemsAcross = .ItemsAcross

    Me.txtRowSpacing = fsToCentimeters(.RowSpacing)

    Me.txtColumnSpacing = fsToCentimeters(.ColumnSpacing)

    Me.txtItemSizeWidth = fsToCentimeters(.ItemSizeWidth)

    Me.txtItemSizeHeight = fsToCentimeters(.ItemSizeHeight)

    Me.chkDefaultSize = .DefaultSize

    Me.fraItemLayout = .ItemLayout

  End With

  CheckColumns

End Sub

 

Private Sub txtItemsAcross_AfterUpdate()

  CheckColumns

End Sub

 

Private Sub cmdUpdate_Click()

  With Reports(mstrReport).Printer

    .ItemsAcross = Val(Me.txtItemsAcross)

    .RowSpacing = fsFromCentimeters(Me.txtRowSpacing)

    .ColumnSpacing = fsFromCentimeters(Me.txtColumnSpacing)

    .DefaultSize = Me.chkDefaultSize

    If Not .DefaultSize Then

      .ItemSizeWidth = fsFromCentimeters(Me.txtItemSizeWidth)

      .ItemSizeHeight = fsFromCentimeters(Me.txtItemSizeHeight)

      .ItemLayout = Me.fraItemLayout

    End If

  End With

End Sub

 

Private Sub CheckColumns()

  Dim fEnable As Integer

   

  fEnable = (Me.txtItemsAcross > 1)

  Me.txtItemSizeWidth.Enabled = fEnable

  Me.txtItemSizeHeight.Enabled = fEnable

  Me.chkDefaultSize.Enabled = fEnable

  Me.fraItemLayout.Enabled = fEnable

End Sub

 

 

5. フォームを開く

VBEのツールバーから表示(Access)のアイコンをクリックして、Accessのウィンドウに切り替えます。Accessのツールバーからフォームビューのアイコンをクリックしてフォームを開きます。コンボボックスからレポート[rptSample1]を選択すると、レポートの行列、サイズ、印刷方向などのレイアウト情報が表示されます。さらに、レポートがプレビューモードで表示されます。レポートのレイアウトを変更したときは、[設定]ボタンをクリックしてレポートに反映します。

 

 

コンボボックスからレポートを選択してレイアウトを変更する

 

 

●解説

 

コンボボックスからレポートを選択したとき、レポートのレイアウト情報を表示するには、コンボボックスの更新後処理/AfterUpdateイベントを使用します。このイベントでは、コンボボックスから選択したレポートをプレビューモードで開いて、レポートの行列(列数、行間隔、列間隔)、サイズ(幅、高さ)、印刷方向(左から右へ、上から下へ)などのレイアウト情報を表示します。なお、レポートのレイアウトはtwipの単位(1440twips=1inch, 1inch=2.54cm)で格納されていますので、cmの単位に変換して表示します。

 

コンボボックスの更新後処理/AfterUpdateイベント

Private Sub cboReports_AfterUpdate()

  コンボボックスからレポート名取得

  mstrReport = Me.cboReports.Value

  レポートをプレビューモードで開く

  DoCmd.OpenReport mstrReport, View:=acViewPreview

  Printerオブジェクトのレイアウト情報を取得

  With Reports(mstrReport).Printer

    Me.txtItemsAcross = .ItemsAcross列数

    Me.txtRowSpacing = fsToCentimeters(.RowSpacing) ‘ 行間隔

    Me.txtColumnSpacing = fsToCentimeters(.ColumnSpacing) ‘ 列間隔

    Me.txtItemSizeWidth = fsToCentimeters(.ItemSizeWidth) ‘

    Me.txtItemSizeHeight = fsToCentimeters(.ItemSizeHeight) ‘ 高さ

    Me.chkDefaultSize = .DefaultSize詳細セクションの幅/高さ適用

    Me.fraItemLayout = .ItemLayout印刷方向(左から右へ、上から下へ)

  End With

End Sub

 

レイアウトを変更して[設定]ボタンをクリックしたときは、クリック時/OnClickイベントでテキストボックスなどに格納されているレイアウトをレポートに反映します。レポートのレイアウトは、twipの単位で設定する必要がありますのでcmtwipに変換します。

 

 

設定ボタンのクリック時のイベント

Private Sub cmdUpdate_Click()

  Printerオブジェクトのレイアウト情報更新

  With Reports(mstrReport).Printer

    .ItemsAcross = Val(Me.txtItemsAcross) ‘ 列数

    .RowSpacing = fsFromCentimeters(Me.txtRowSpacing) ‘ 行間隔

    .ColumnSpacing = fsFromCentimeters(Me.txtColumnSpacing) ‘ 列間隔

    .DefaultSize = Me.chkDefaultSize ‘ 詳細セクションの幅/高さ適用

    詳細セクションの幅/高さを適用しないときは以下の処理を行う

    If Not .DefaultSize Then

      .ItemSizeWidth = fsFromCentimeters(Me.txtItemSizeWidth) ‘

      .ItemSizeHeight = fsFromCentimeters(Me.txtItemSizeHeight) ‘ 高さ

      .ItemLayout = Me.fraItemLayout ‘ 印刷方向

    End If

  End With

End Sub

 

ダウンロード (175.lzh)