フォームを表示したとき、その内部にレポートのプレビューウィンドウをコントロールのように表示させる方法です。
ここではその基本的な方法について簡単に説明します。そのため、レポートのズームやフォーム内でのスクロールは利きません。
- まず、フォーム内に表示するレポートを作成します。ふつうのレポートデザインでかまいませんが、フォーム内にコントロールのように表示させるため、「境界線スタイル」プロパティを”なし”に設定します。
レポートのデザイン:

プレビューしたときの状態:

- 次に適当なフォームを作ります。レポートの表示サイズに合わせて、フォームの大きさを設定しておきます。ただしこの時点ではまだレポートの大きさが分かりませんので、適当に作っておいて、あとで調整を加えます。

- 次に、次のようなVBAのコードをフォームのモジュール上に記述します。
Windows APIの「SetParent」関数は、ウィンドウの親子関係を設定するための関数で、これを使ってレポート(rpt仕入先)のプレビューウィンドウをフォームの子ウィンドウにすることで、フォーム内レポート表示を実現しています。
Private Declare Function SetParent Lib "user32" ( _
ByVal hWndChild As Long, _
ByVal hWndNewParent As Long) As Long
Private Sub Form_Load()
'フォーム読み込み時
'レポートをプレビューで開く
DoCmd.OpenReport "rpt仕入先", acViewPreview
'レポートの位置とサイズをフォームに合わせて調整
'(フォームに対する相対位置を設定)
DoCmd.MoveSize 200, 200, 12000, 8000
'レポートの親ウィンドウをフォームに設定
SetParent Reports!rpt仕入先.hwnd, Me.hwnd
End Sub
実行結果:
 |