Microsoft Access 掲示板

レポートのレコードソースの取得について

7 コメント
views
4 フォロー

いつもお世話になります
hatenaさまのサイトで、印刷プレビューに[印刷][閉じる]ボタンを付加する関数https://hatenachips.blog.fc2.com/blog-entry-404.html
を参考にさせていただきました
このフォームに EXCEL出力 のコマンドボタンを追加して プレビューされたデータをEXCELデータとして取り込みしたいです
コマンドボタンのクリック時のコードは 別サイトで見て書いてみました

   Dim strsql As String
    Dim strFileName As String
    Dim xlapp As Object
    Dim myCn As New ADODB.Connection
    Dim myRs As New ADODB.Recordset
    Dim colcnt As Integer
    Dim csOutputFileName As AccessObject

    On Error GoTo Err_Exit

    'ファイル名作成
    strFileName = csOutputFileName & "_" & Format(Date, "yyyymmdd") & ".xlsx"

    'EXCELアプリケーションを起動
    Set xlapp = CreateObject("Excel.Application")

    Set myCn = CurrentProject.Connection

    strsql = "SELECT * FROM テストテーブル"

    'レコードセットオープン
    myRs.Open strsql, myCn, adOpenForwardOnly, adLockReadOnly

    With xlapp
        'セットする過程が見えないよう一旦不可視
        .Visible = False

        '新しいBookを追加
        .Workbooks.Add
        .Worksheets("Sheet1").Select

        'レコードセットのフィールド名(見出し)出力処理
        For colcnt = 0 To myRs.Fields.Count - 1
            .Worksheets("Sheet1").Cells(1, colcnt + 1).Value = myRs.Fields(colcnt).Name
        Next

        '結果値出力処理(1行目はヘッダーなので、2行目1列目からセット
        .Cells(2, 1).CopyFromRecordset myRs

        '列幅自動調整
        .Cells.EntireColumn.AutoFit

        '完了したら保存
        .ActiveWorkBook.SaveAs FileName:=strFileName

        MsgBox "出力しました。", vbOKOnly + vbInformation

    End With

    Set myRs = Nothing: Close
    Set myCn = Nothing: Close
    'Excelを終了します
    xlapp.Quit
    Exit Sub

Err_Exit:
    MsgBox Err.Number & ":" & Err.Description, vbOKOnly + vbCritical, "OutputExcel()"
    Set myRs = Nothing: Close
    Set myCn = Nothing: Close
    xlapp.Quit

こんな感じでできると思いますが

途中の  strsql = "SELECT * FROM テストテーブル"の箇所を 

     Report.RecordSource にしたいのですが できるのでしょうか?
 
また、どのように書けばよいのかわかりません

ご指導お願いいたします

       

のりちやん
作成: 2021/11/26 (金) 16:52:54
最終更新: 2021/11/26 (金) 16:54:16
通報 ...
1

ブログのコメント欄でも書きましたが、OutputToメソッドを使えば1行で済みますが、それではうまくいかなかったのでしょうか。

DoCmd.OutputTo acReport, "レポート名", acFormatXLS, "C:\test\test.xls"
2
りんご 2021/11/26 (金) 21:44:10 c564b@0e907

CurrentDb.QueryDefs(Me.RecordSource).SQL

3
りんご 2021/11/26 (金) 22:46:06 c564b@0e907

 OutputToメソッドやTransferSpreadsheetメソッドでは駄目なのでしょうか?中には非推奨とするサイトもあるようですが、鵜呑みにせずに本当に駄目なのか慎重に判断でましょう。
 コーディングの是非もありますが、Excelエクスポートの是非も気になります。そもそも、AccessとExcelの業務連携の必要性、何の為にAccessを導入しているのかと。

 コマンドボタンのクリック時のコードは 別サイトで見て書いてみました

 参考にするなら、下記サイトなんかはどうでしょう?
 

Accessのノウハウ(フォーム上でのエクスポート設定)
「ファイルのインポート・エクスポートをフォーム上で実行する」のその2 エクスポート 版です。インポートの項で、フォームの作り方・フォーマットテーブルとの連携の仕方・クエリの名前付け等についてお話しましたので、エクスポートについては、まずは、モジュールサンプルを提示します。フォームとモジュールサンプルこんなフォームを作るとします。レコードソースは、インポートと同じ T_Formatです。********************
日本システムアドミニストレータ連絡会

4
のり 2021/11/29 (月) 13:49:02 f1fa6@5536d

hatenaさま お返事ありがとうございます
hatenaさまの「F_PreViewChildMenu」のフォームはありとあらゆるレポートの出力に利用させてもらっています
そのため OutputTo acReport ”レポート名” では 「F_PreViewChildMenu-1」 「F_PreViewChildMenu-2」といったように その特定のレポートごとにフォームを作らなくてはなりません、なので現在ひらいているレポートのレコードを取りたかったのです
りんごさま お返事ありがとうございます EXCELはACCESSで加工されたデータを、その時だけに必要な集計表や煩雑なレポートを作成するために利用しております
CurrentDb.QueryDefs(Me.RecordSource).SQL ありがとうございます フォーム上でのエクスポート設定を読んで勉強させていただきます
ありがとうございます

5

F_PreViewChildMenu のTagプロパティにレポート名が格納されている仕様になってます。
よって下記のようなコードで共通に使えます。

DoCmd.OutputTo acReport, Me.Tag, acFormatXLS, "C:\test\" & Me.Tag & ".xls"

レポートのレコードソースがテーブルかクエリなら、DoCmd.TransferSpreadsheet が使えます。
わさわざ質問のような面倒なコードを使う必要性はないです。
その場合も、レポート名は、Me.Tagで取得できます。
ただし、レポートを開く時にフィルターをかけていたり、並べ替えを設定していたりすると、それが反映されないので、それを反映させたい場合はまた、面倒なことになります。

6
のり 2021/11/29 (月) 16:04:48 f1fa6@5536d

hatenaさま ありがとうございます
勉強不足ですみませんでした 
acReport, Me.Tag をそのまま使えばよかったのですね
難しく考えすぎていました OutputTo で対応いたします
本当にありがとうございました

7
のり 2021/12/01 (水) 16:46:45 d46dd@5536d

いつもお世話になります
レポートのレコードソースを取得する方法を教えていただきましたが
DoCmd.OutputTo acReport, Me.Tag, acFormatXLS, では 
現在出力しようとしているオブジェクトの型式は無効ですのエラーがでます
acReportを acOutputReportにしても acFormatXLS を acOutputXlsにしてもだめでした
acOutputReportではダメで acOutputTableでは出力されます
なぜでしょうか?
ちなみに ACCESS2007です 
2007 Office スイート Service Pack でアップデートしなくてはだめなのでしょうか?