Excel VBAからAccessのレポートをプレビュー

Excel VBAからAccessのレポートをプレビュー用に開く方法です。

Excel側のコーディング

Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long _
, ByVal nCmdShow As Long) As Long
Private Sub CommandButton1_Click()
    Dim oAccess As Access.Application
    Dim rc As Long
    Set oAccess = CreateObject("Access.Application")
    oAccess.OpenCurrentDatabase ThisWorkbook.Path & "\" & "testdb.mdb"
    rc = ShowWindow(oAccess.Application.hWndAccessApp, 2)
    oAccess.Reports.Application.Visible = True
    oAccess.DoCmd.OpenReport "testreport", acViewPreview
    oAccess.DoCmd.MoveSize 100, 100, 11340, 8505  'ポップアップウィンドウのサイズ調整
    Set oAccess = Nothing
End Sub

Access側がAccess2000の場合、以下のような方法でも可能です。

Private Sub CommandButton1_Click()
    Dim oAccess As Access.Application
    Set oAccess = CreateObject("Access.Application")
    oAccess.OpenCurrentDatabase ThisWorkbook.Path & "\" & "testdb.mdb"
    oAccess.Reports.Application.Visible = True
    oAccess.Reports.Application.UserControl = True
    oAccess.DoCmd.RunCommand acCmdAppMaximize     'Accessメインウィンドウを最大化
    oAccess.DoCmd.OpenReport "testreport", acViewPreview
    oAccess.DoCmd.Maximize                        'Accessレポートを最大化
    Set oAccess = Nothing
End Sub

Access側の作業

  • 対象のレポートを作成する。
  • 表示するレポートの「ポップアップ」プロパティを「はい」にする。(Access2000の場合は設定しません)
  • 表示するレポートの「閉じる時」プロパティ(イベント)を編集して、以下のようなイベントプロシージャを追加する。
Private Sub Report_Close()
    Quit
End Sub
  • 注意:Accessのマクロのセキュリティレベルが「低」でないとmdbをオープンできないようです。

動作確認

Excel2003 + Access2003
※Access2000のやり方のほうは、Excel2000 + Access2000 で確認しました.

検索キーワード

VBA Access Excel プレビュー レポート