Access2003レポートの連続印刷方法とは?

このQ&Aのポイント
  • Access2003で取引案件管理データベースを作成している場合、案件ごとにA、B、Cの三種類のレポートがあり、それを順番に印刷する方法を知りたいです。
  • 具体的には、総合メニューにある「レポート印刷ボタン」を押すと、案件ごとに連続でレポートA、B、Cを印刷できるようにしたいです。
  • コードの組み合わせやレコード送りを利用することで実現できると思いますが、時間的な制約から試行錯誤する時間がありません。コードの具体的な実装方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

Access2003レポートの連続印刷方法

以下のような仕様にて、Access2003で取引案件管理データベースをつくっています。 一案件ごとにA,B,Cと三種類のレポートがあり、それを順番に印刷する機能を追加しようとしているのですが、方法がわからず、アドバイスをお願い致します。 *仕様* ・ユーザはアクセスオープン時に、自身のIDとパスワードを入力 ・認証が通ると、総合メニュー画面が起動される。 総合メニューには「入力フォーム起動ボタン」と「レポート印刷ボタン」がある ・DB内部でIDとユーザの所属部署の紐付けを行っており、入力フォームを起動すると、自分の所属部署の担当案件だけが表示される (フォームのコードで、グループごとにフィルタをかけている) ・レポートは案件ごとにA,B,Cと三枚に分かれている ・入力フォーム内にも、印刷ボタンがあり、それを押すと表示されている案件のレポートがA、B、Cの順番で出力される。 コードは以下の通り DoCmd.OpenReport "レポートA", acViewNormal, WhereCondition:="[案件名] ='" & Me.案件名 & "'" DoCmd.OpenReport "レポートB", acViewNormal, WhereCondition:="[案件名] ='" & Me.案件名 & "'" DoCmd.OpenReport "レポートC", acViewNormal, WhereCondition:="[案件名] ='" & Me.案件名 & "'" *今回つくりたい機能* 総合メニューの「レポート印刷ボタン」の中身を実装したいと考えています。 これを押すと、案件ID「001」のレポートA→B→C→案件ID「002」のレポートA→B→C→案件ID「003」・・というように、案件ごとにレポートA,B,Cがセット(連続)で印刷できるようにしたいのです。 上の構文と、レコード送りを組み合わせればいいのではないかと予想はついているのですが…緊急対応で、自分でコードを試行錯誤している時間がないもので、コードを上のような機能を実現できるコードを教えて頂けますと幸いです。宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

部署,案件ID順に、Filterで対象を制限してレポートを出力したいということですね。 Set rs = dbs.OpenRecordset("テーブル") と書きましたが、ここで指定できるのはテーブル名だけではなく、SQLのSELECT文も指定できます。 なので、CaseごとにOpenのしかたを変えてください。 Select Case Group Case "sda" Set rs = dbs.OpenRecordset("SELECT 案件ID FROM テーブル WHERE 部署 LIKE 'xxx' ORDER BY 部署, 案件ID") Case "sdb" Set rs = dbs.OpenRecordset("SELECT 案件ID FROM テーブル WHERE 部署 LIKE 'yyy' ORDER BY 部署, 案件ID") Case "sdc" Set rs = dbs.OpenRecordset("SELECT 案件ID FROM テーブル WHERE 部署 LIKE 'zzz' ORDER BY 部署, 案件ID") Case Else msgbox "エラー" Exit Sub End Select レポート出力部分は、次のようになります。 DoCmd.OpenReport "レポートA", acViewNormal, WhereCondition:="[案件ID] ='" & rs!案件ID & "'" DoCmd.OpenReport "レポートB", acViewNormal, WhereCondition:="[案件ID] ='" & rs!案件ID & "'" DoCmd.OpenReport "レポートC", acViewNormal, WhereCondition:="[案件ID] ='" & rs!案件ID & "'"

zero22222
質問者

補足

丁寧なご解説ありがとうございます。 アドバイスを元に下記のようにコードを作成したのですが、 一件目の印刷が終わった後に、エラーが出てしまいました。 内容は「このコレクションには項目がありません」というもので、 デバックの画面ではMsgBox rs!項目の部分が黄色くなっていました。 ただ、この「MsgBox rs!項目」の構文を削除して試してみたのですが、 すると一件目だけ印刷して終了してしまいました。 構文の順番が間違っているのでしょうか…? Private Sub コマンド23_Click() Dim dbs As Database Dim rs As DAO.Recordset Dim stDocName As String Set dbs = CurrentDb Select Case Group Case "sda" Set rs = dbs.OpenRecordset("SELECT 案件ID FROM 案件マスター WHERE 部署 LIKE 'xxx' ORDER BY 部署,案件ID") Case "sdb" Set rs = dbs.OpenRecordset("SELECT 案件ID FROM 案件マスター WHERE 部署 LIKE 'yyy' ORDER BY 部署,案件ID") Case Else Exit Sub End Select DoCmd.OpenReport "レポートA", acViewNormal, WhereCondition:="[案件名] ='" & rs!案件ID & "'" DoCmd.OpenReport "レポート", acViewNormal, WhereCondition:="[案件名] ='" & rs!案件ID & "'" DoCmd.OpenReport "レポートC", acViewNormal, WhereCondition:="[案件名] ='" & rs!案件ID & "'" Do Until rs.EOF MsgBox rs!項目 rs.MoveNext Loop rs.Close End Sub

その他の回答 (1)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

レコードの読み込み方法が分からないのでしょうか。 テーブルのアクセス方法には、ADOとDAOがあります。 (DAOの場合) Sub レポート印刷() Dim dbs As Database Dim rs As DAO.Recordset Set dbs = CurrentDb Set rs = dbs.OpenRecordset("テーブル") Do Until rs.EOF MsgBox rs!項目 rs.MoveNext Loop rs.Close End Sub (ADOの場合) Sub レポート印刷() Dim cnn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cnn = CurrentProject.Connection rs.Open "テーブル", cnn Do Until rs.EOF MsgBox rs!項目 rs.MoveNext Loop rs.Close cnn.Close End Sub

zero22222
質問者

補足

レコードの読み込み方「も」なのですが…仕様についての説明足らずで申し訳ありません。 まず、このレポートのソースとなっているテーブルは(個々のレポートの中だけで複数あります) また、ユーザに開示するレコードはあくまでそのユーザが所属する部署のものだけとしたいので、入力フォームおよび各レポートに次のようにフィルタをかけています。 Me.OrderBy = "[部署],[案件ID]" Me.OrderByOn = True Select Case Group Case "sda" Me.Filter = "部署 like 'xxx'" Me.FilterOn = True Case "sdb" Me.Filter = "部署 like 'yyy'" Me.FilterOn = True Case "sdc" Me.Filter = "部署 like 'zzz'" Me.FilterOn = True Case Else End Select End Sub ちなみに、案件IDは文字列です。 たりたいことをより正確にかくと、 1.ユーザの部署にフィルタをかけた状態で一番初めに表示される(ソートで一番前になる)案件001のレポートAを印刷 2.001のレポートBを印刷 3.001のレポートCを印刷 2.ソート順2番目の案件002のレポートAを印刷… となります。 この場合、教えて頂いたコードの Set rs = dbs.OpenRecordset("テーブル") の下のところに Me.OrderBy = "[部署],[案件ID]" Me.OrderByOn = True Select Case Group Case "sda" Me.Filter = "部署 like 'xxx'" Me.FilterOn = True Case "sdb" Me.Filter = "部署 like 'yyy'" Me.FilterOn = True Case "sdc" Me.Filter = "部署 like 'zzz'" Me.FilterOn = True Case Else End Select End Sub という構文を埋め込むようなイメージでしょうか。 また、印刷対象となるのはあくまでレポートなのですが、それはどのタイミングで記述すればよいのでしょうか。 (rs.Open "テーブル", cnn Do Until rs.EOF MsgBox rs!項目 という構文はテーブルの全項目を読み出している、という意味と推察しているのですが、テーブルごとにこういった形で指定しなければいけ二のでしょうか…どのテーブルのどの項目をつかう、というのはレポートで設定してあるのでレポートの指定ができたら一発かと思うのですが…) わかりづらくてすみません; 宜しくお願い致します。

関連するQ&A

  • Accessのレポート印刷について

    Access2007を使用しています。 DoCmd.OpenReport "レポート名", acViewNormal, , Me.Filter で絞り込みをした内容のレポートで1枚目だけが印刷されるようにしたいのですが、 どうしたら良いですか? 2枚目・3枚目は印刷したくないので、1枚目だけが印刷されるようにしたいです。 よろしくお願いします。

  • access2000で作成したVisual Basicがaccess2007で使えないのはなぜ?

    教えてください。 access2000で作成したVisual Basicがaccess2007で使えないのです。 フォームにボタンを設定し、(1)(2)ボタンをクリックすればイベントを行う機能にしました。 (1)検索  DoCmd.OpenReport "レポート名", acViewPreview, "フィールド名" (2)印刷  DoCmd.OpenReport "レポート名", acViewNormal, "フィールド名" もちろんセキュリティオプションでコンテンツを有効にしています。 なぜか、関連付けされていないオブジェクトにフォームが入っています。 2000ではできるのに、なぜか2007ではできません。 どうしてでしょうか。教えていください。

  • アクセス2007 フォームフィルターをレポートにも

    アクセス2007 フォームフィルターをレポートにも フォームA---「家」データ        「家ID」 佐藤さん、斎藤さん、住所、電話等 フォームB---「家族内」データ        各家の家族構成 お父さんの誕生日、お母さんの誕生日などなど「家ID」有り フォームBでフィルターをかけ、「家ID」を元にフォームAで該当するデータを表示させています。 ----------------------------------------------------   Set rs = Forms.フォームB.RecordsetClone   Do Until rs.EOF     フィルタ = フィルタ & "," & rs!家ID rs.MoveNext Loop rs.Close   フィルタ = "家ID IN (" & Mid$(フィルタ, 2) & ")"   DoCmd.OpenForm "フォームA", WhereCondition:=フィルタ, ---------------------------------------------------- ※フィルタは255文字を超える場合有り このフォームAを元に レポートC(はがき宛先)で DoCmd.OpenReport "レポートC", acViewPreview, WhereCondition:=フィルタ(または、forms.フォームA.Filter) とすると「フィルターが長い」とエラーになります。 OpenFormでのWhereCondition:=は長くても受け付けますが、OpenReportの方は受付ないみたいです。 リレーションの知識不足のまま、進めてきたシッペ返しが今きているのですが、 こんな場合どうしたらフォームの検索条件をレポートに反映できるでしょうか?

  • VBA「レポートを開く、なおかつ印刷はしない」

    アクセス2007です。 レポート1を作って保存し閉じました。 標準モジュールに Sub test() DoCmd.OpenReport "レポート1", acViewNormal End Sub と記載して実行したら、レポートが印刷されてしまいます。 私は開きたいだけなので、 VBAで「レポートを開く、なおかつ印刷はしない」と言うコードををしえてください。 ご回答よろしくお願いします。

  • VB6からアクセスのレポートをプレビューするには?

    おはようございます。またまた躓いたのでお助け下さい<(_ _)>VB6で、アクセス2000にパーツ名を読み書きしています。アクセスの方でレポートを作ってあるのですが、印刷はいけそうなのですが、これを印刷前にプレビューしたいのですが、 Set accApp = CreateObject("Access.Application") accApp.OpenCurrentDatabase "C:\part-name.mdb" accApp.DoCmd.OpenReport "パーツ情報", acViewNormal 印刷について参考にさせていただいたソースです。DoCmd.OpenReport が印刷ですよね?ここを変更するのでしょうか?よろしくお願いします<(_ _)>

  • Accessのレポート印刷について教えて下さい。

    Accessのフォームでフィルタを使い絞り込んだデータをレポートで 印刷する場合について教えて下さい。 DoCmd.OpenReport "レポート名", acViewPreview, , Me.Filter では、フォームとレポートが同じレコードソースだと使えるという事ですが、 フォームとレポートのレコードソースが別の場合はどのようにすると フィルタで絞り込んだ条件のレポートを印刷できますか? 教えて下さい。よろしくお願いします。

  • ACCESS 指定レコードのレポート印刷

    OKWaveでも他の方が質問していますが、同様な対応をしても、どうも正常動作しません。 内容:1.フォーム作成完了 → 2.レポート作成完了 → 3.現在フォームに表示されているレコードを(2)で作成したレポート形式で印刷(プレビュー)をしたい。 レポート名:看板 フォーム名:管理    フォーム画面上には ID を表示させています。 テーブル名:管理TBL 管理TBLには ID というフィールドはあります。 実施内容:下記内容を印刷コマンドボタンのイベントプロシジャーに記述。 Private Sub report_Click() Dim stDocName As String   DoCmd.OpenReport "看板", acViewPreview, , "[ID]=" & [Forms]![管理]![ID] End Sub 例えば、レコード3のフォーム上で上記内容のコマンドボタンをクリックすると、IDのパラメータのポップアップが表示され3を入力後、看板のレポートプレビューが表示されますが、固定データのみ表示されているレポートで当該レコードの内容が反映されたレポートが表示されません。 レコード1のフォーム上で実施したら、IDパラメータポップに1を入れると全レコードのレポートがプレビューされます。 どうしたら、カレントレコードの内容のみを反映したレポートをプレビューさせることができるのでしょうか、ご教授下さい。また IDパラメータポップアップも表示させたくありません。

  • アクセス 開いているレポート名を取得する。

    アクセス初心者です。 VBAにて フォーム1でレポート、レコードを選択後に レポートを開くと同時に印刷フォームも開くように組んでます。 その印刷フォームで印刷をすると、印刷フォーム自体が印刷されてしまうので ”レポート名”を認識させてから印刷しています。 その時の”レポート名”を開いたときに自動的に変数として印刷フォームに引き継ぎたいのですが やり方が分かりません。 意図としては、印刷フォームを汎用的に使いたいためです。 印刷フォームの呼び出しコードは下記にて Private Sub コマンド18_Click() Dim report_name As String Dim report_value As String If Not IsNull(コンボ50.Value) = True Then report_name = コンボ48.Value  ’レポート名です report_value = コンボ50.Value DoCmd.OpenReport report_name, acViewPreview, , "[現場名]='" & report_value & "'" DoCmd.MoveSize Width:=10000, Height:=13000 Reports(report_name).ZoomControl = 75 Else MsgBox "項目を選択してください。" End End If DoCmd.OpenForm "印刷_フォーム", acNormal End Sub Private Sub コマンド53_Click() Dim new_date As String Dim form_name As String If Not IsNull(コンボ48.Value) = True Then form_name = コンボ48.Value DoCmd.OpenForm form_name, acNormal, , , acFormAdd DoCmd.MoveSize Width:=12000, Height:=13000 Else MsgBox "[取引先名]を入力してください。" End If End Sub 下記は印刷フォームにて、印刷設定をする場合のコードです Private Sub コマンド0_Click() Dim report_name As String report_name = "レポート名" On Error Resume Next DoCmd.SelectObject acReport, report_name, True DoCmd.RunCommand acCmdPrint End Sub

  • Accessでのレポート印刷待機方法

    お世話になってます。 以下の処理をAccess(VBA)で実装したいのですが、処理2を行なうまでに印刷が完了しなかった場合、エラーが発生してしまいます。 レポート印刷のハンドルを取得して待機APIを実行すればと色々試してはみましたがハンドルの取得方法がわかりません。 例えば、ファイルへのアクセス判定など、どのような解決方法でも良いのでどなたかご教授頂けますでしょうか。 Access97,2000を使用 1.レポートを印刷し、Tiffを生成(ファイル名、出力先は固定という制限があります) Call DoCmd.OpenReport(レポート名, acViewNormal) ※レポートのページ設定でプリンタを指定している。 プリンタは固定のパスへTiffファイルを出力する。 2.生成したTiffを任意の場所ににコピー FileCopy 固定出力パス, "c:\test.tiff" 1と2の間に印刷が完了(ファイルが完成)しているかを確認する処理を加える事が可能でしょうか。 よろしくお願いいたします。

  • Access2007レポート特定レコードのPdf化

    Access2007を使用して台帳管理を行っています。 その際にレポートをPdf化して電子保存を行っていますが、いちいちメニューからレコード指定しでファイル出力するのが煩雑なのでVBAを勉強して自動化しようと思っています。 実装したい機能はフォーム上に配置されたボタンを押したら、そのIDのレポート(PDFファイル)が指定のフォルダに保存されるものです。 初心者なりにいろいろ調べて下記のコードに行きついたのですがうまくID選択されません(全レコード保存される)。 ご教授お願いします。 Sub Pdf作成() DoCmd.OpenReport "レポート名", acViewPreview, , "ID=" & Me!ID DoCmd.OutputTo acOutputReport, "レポート名", acFormatPDF, "保存path&ファイル名.pdf" End Sub

専門家に質問してみよう