#536 スナップショットを使ってフォーム内にレポートを表示する方法 フォーム、VBA

一般的に、Accessのフォームの中にレポート(プレビュー状態のもの)を表示させることは面倒なプログラムを使わないと実現できません。サブフォームのようにしてレポートオブジェクトをフォームのデザイン上に挿入することもできません。

しかし、レポートの印刷内容を外部のファイルとして保存したスナップショット形式のファイル(拡張子.snp)と、それを見るための「Snapshot Viewer Control」を利用することで、フォーム内にレポートを表示させることができます。

ここでは、次のような流れを例としてそのようなフォームを作ってみます。
  • フォーム上のボタンをクリックすることで、特定のレポートを.snpファイルにエクスポートする

  • Snapshot Viewer Controlのソースとしてそのファイルを動的に指定することで、その内容をフォームに表示する

※Snapshot Viewer Controlでは表示するファイルをプロパティシートで固定的に指定することもできますので、常に同じパスのファイルを表示する場合には、ソースを動的に切り替える処理は不要となります。ただしレポートの内容はデータの変化に応じて変わることが多いと思いますので、何らかのタイミングで.snpファイルを最新状態にするために再生成する処理は必要かもしれません。


それでは実際にフォームを作ってみましょう。
  1. 空のフォームを用意します

  2. リボンの[デザイン]タブより[ActiveX コントロール]をクリックします
    [ActiveX コントロール]をクリック

  3. ActiveX コントロールの一覧が表示されたら、その中から「Snapshot Viewer Control」を選択して[OK]ボタンをクリックします。
    Snapshot Viewer Controlを選択
      
    Snapshot Viewer Controlが挿入される

  4. 挿入されたコントロールの位置やサイズを整えます。
    コントロールの位置やサイズを調整

  5. 次に、処理を実行するためのコマンドボタンコントロールを適当な位置とサイズで配置します。
    コマンドボタンコントロールを配置
    なおここでは、コマンドボタンの名前プロパティは「cmdレポート表示」、Snapshot Viewer Controlはデフォルトの「SnapshotViewer0」とします。

  6. コマンドボタンのクリック時イベントプロシージャに次のようなプログラムを記述します。

    Private Sub cmdレポート表示_Click()
    '[レポート表示]ボタンクリック時

      Dim strSNPPAth As String

      '出力先のフルパスを設定(データベースと同じフォルダを指定)
      strSNPPAth = CurrentProject.Path & "\" & "rpt得意先.snp"

      '「rpt得意先」レポートを.snpに出力する
      DoCmd.OutputTo acOutputReport, "rpt得意先", acFormatSNP, strSNPPAth

      '出力されたファイルをSnapshot Viewer Controlに指定
      Me.SnapshotViewer0.SnapshotPath = strSNPPAth

    End Sub



実行例:

クリック前の状態
クリック前の状態

クリック直後(レポートが.snpに出力されるところ)
レポートが.snpに出力される

レポート表示後
レポート表示後

レポートは表示サイズを変えることも可能
レポートの表示サイズ変更

  • レポート表示時には、コントロール下部のレコード移動ボタンでページを移動したり印刷を実行したりすることもできます。
    レコード移動ボタン
  • Snapshot Viewer Controlのプロパティの設定画面(コントロールの右クリックのメニューから表示される画面)によって、初期表示時のレポートのサイズや移動ボタンの有無なども設定することができます。
    Snapshot Viewer Controlプロパティの設定
| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします


Copyright © T'sWare All rights reserved