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

図 レポートのレイアウトを設定する
コンボボックスからレポートを選択してレポートのレイアウトを設定します。フォームのコンボボックスからレポートを選択すると、選択したレポートがプレビューモードで表示されます。さらに、レポートの行列、サイズ、印刷方向などのレイアウト情報が表示されます。レイアウト情報を変更したときは、[設定]ボタンをクリックしてレポートに反映します。
1. 新規データベース作成
Accessを起動したら、ツールバーから新規作成のアイコン
をクリックして、作業フォルダworkにW175.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 |
|||||
|
オプションボタン
|
|||||||
|
コマンドボタン |
標題 |
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の単位で設定する必要がありますのでcmをtwipに変換します。
‘ 設定ボタンのクリック時のイベント
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