Access (一般機能) |
![]() ![]() |
(Windows 11 Home : Microsoft 365)
PDFを分割して出力したい
投稿日時: 23/09/06 13:37:35
投稿者: yurappy
|
---|---|
お世話になります。
|
![]() |
投稿日時: 23/09/06 14:30:44
投稿者: sk
|
---|---|
引用: 引用: Access の機能のみで実現したい、ということなのであれば、 VBA のコードを用いてそういう自動処理を実行するしかないでしょう。 |
![]() |
投稿日時: 23/09/06 14:56:49
投稿者: yurappy
|
---|---|
sk様
|
![]() |
投稿日時: 23/09/06 15:19:43
投稿者: sk
|
---|---|
ではとりあえず、以下の情報を明記して下さい。
|
![]() |
投稿日時: 23/09/06 15:59:45
投稿者: Suzu
|
---|---|
引用: 1ページ づつでも良いのであれば フリーで、分割ツールはありますから、WEB検索をしてみてはどうでしょう。 |
![]() |
投稿日時: 23/09/06 16:37:16
投稿者: yurappy
|
---|---|
sk様
引用: レポートの名前は、請求書_PDF発行 です。 レポートの中にサブレポートで商品明細などを読み込んでます。 引用: レコードソースとはクエリの名称でよろしいでしょうか。 クエリの名称でしたら、請求書発行_PDF です。 引用: SQLビューをそのままコピーたのが次のものです。 SELECT tokuisaki.[c-code], tokuisaki.tokuisaki, tokuisaki.shime, tokuisaki.post, tokuisaki.address, tokuisaki.tel, tokuisaki.fax, personal.company, personal.address, personal.tel, personal.fax, personal.bank, personal.bank_1, personal.bank_2, personal.bank_3, Sum(uriage.price) AS priceの合計 FROM (tokuisaki INNER JOIN personal ON tokuisaki.prm = personal.prm) INNER JOIN uriage ON tokuisaki.[c-code] = uriage.[c-code] WHERE (((Format([hiduke],"yy/mm"))=[Forms]![start]![tx1])) GROUP BY tokuisaki.[c-code], tokuisaki.tokuisaki, tokuisaki.shime, tokuisaki.post, tokuisaki.address, tokuisaki.tel, tokuisaki.fax, personal.company, personal.address, personal.tel, personal.fax, personal.bank, personal.bank_1, personal.bank_2, personal.bank_3 HAVING (((tokuisaki.shime)=31) AND ((Sum(uriage.price))>0)); c-codeで親子関係をしてます。 よく理解ができていないので、間違っていたらすみません。 引用: 助言いただいて、ありがとうございます。 https://www.ilovepdf.com/ja などで、試してみましたが毎日の事なので、できればアクセスだけで 作業ができればと思いまして、わがままですみません。 お手数をおかけしている上に、ちゃんとしたご回答やお願いがでなくて、失礼ながらすみません。 お願いできれば、たいへん助かります。 よろしくお願い申し上げます。 |
![]() |
投稿日時: 23/09/06 16:51:24
投稿者: sk
|
---|---|
引用: 引用: テーブル[tokuisaki]の主キーが[c-code]であるとして、 このフィールドのデータ型は何でしょうか。 引用: 引用: レポート[請求書_PDF発行]を開く命令(マクロ、またはイベントプロシージャ)は フォーム[start]上のコマンドボタンの[クリック時]イベントで実行されているのでしょうか。 |
![]() |
投稿日時: 23/09/06 18:27:57
投稿者: yurappy
|
---|---|
sk様
引用: 仰る通り、テーブルの主キーで 数値型 です。 引用: こちらも、仰る通りでテキストボックスに今日の年と月を入力して、フォーム上のボタンをクリックすると動くようになってます。 ボタンは、デザインモードのボタンのアイコンをクリックして追加して、ウィザードに従って「レポートの操作」、「レポートのプレビュー」と進んで設けてます。 印刷をする前に、内容を確認したかったので「レポートのプレビュー」にしてます。 上手に説明ができなくて、すみません。 間違っていたら、ご指示ください。 よろしくお願い申し上げます。 |
![]() |
投稿日時: 23/09/07 10:43:43
投稿者: sk
|
---|---|
引用: 1. フォーム[start]をデザインビューで開く。 2. 上記のコマンドボタンとは別に、新たなコマンドボタンを フォーム[start]の任意の位置に挿入する。 (その際にコマンドボタンウィザードが起動した場合は、 [キャンセル]ボタンをクリックしてウィザードの実行を中止する) 3. 上記 2 のコマンドボタンの[名前]プロパティと[標題]プロパティの値を 適宜設定する。 (以下、このコマンドボタンの名前が[cmdOutputPdfEachCustomer]であると仮定する)。 4. [cmdOutputPdfEachCustomer]を選択した状態で、プロパティシートの [イベント]タブ上にある[クリック時]プロパティの右側の[...]ボタンを クリックする。 5. 表示された[ビルダーの選択]ダイアログのリストから 「コード ビルダー」を選択して[OK]ボタンをクリックする。 6. cmdOutputPdfEachCustomer_Click プロシージャ内の コードを次のように記述する。 (フォームモジュール) ---------------------------------------------------------------- Private Sub cmdOutputPdfEachCustomer_Click() Const OutputReportName As String = "請求書_PDF発行" If Not Nz(Me![tx1].Value, "") Like "##/##" Then MsgBox "抽出対象となる売上年月を yy/mm 形式で入力して下さい。", _ vbExclamation, _ "入力エラー" Me![tx1].SetFocus Exit Sub End If Dim db As DAO.Database Dim qdf As DAO.QueryDef Dim rs As DAO.Recordset Set db = CurrentDb Set qdf = db.CreateQueryDef("") With qdf .SQL = "SELECT [c-code], [tokuisaki]" & _ " FROM [請求書発行_PDF]" & _ " GROUP BY [c-code], [tokuisaki]" & _ " ORDER BY [c-code]" .Parameters("[Forms]![start]![tx1]").Value = Me![tx1].Value Set rs = .OpenRecordset(dbOpenSnapshot) End With If rs.EOF Then MsgBox "指定された年月において、出力対象となるデータはありません。", _ vbInformation, _ "データなし" Set rs = Nothing Set qdf = Nothing Set db = Nothing Exit Sub End If Dim strOutputFolderPath As String strOutputFolderPath = CurrentProject.Path & "\請求書PDF" If Dir(strOutputFolderPath, vbDirectory) = "" Then MkDir strOutputFolderPath End If strOutputFolderPath = strOutputFolderPath & "\" & Format(Now(), "yyyymmdd_hhnnss") If Dir(strOutputFolderPath, vbDirectory) = "" Then MkDir strOutputFolderPath End If Dim strOutputFilePath As String Do Until rs.EOF DoCmd.OpenReport OutputReportName, acViewPreview, , "[c-code]=" & rs![c-code].Value, acHidden strOutputFilePath = strOutputFolderPath & "\" & _ Replace(Me![tx1].Value, "/", "") & "_" & rs![c-code].Value & "_" & Nz(rs![tokuisaki].Value, "(名称不明)") & ".pdf" DoCmd.OutputTo acOutputReport, OutputReportName, acFormatPDF, strOutputFilePath Debug.Print strOutputFilePath & " を出力しました。" DoCmd.Close acReport, OutputReportName, acSaveNo rs.MoveNext Loop Set rs = Nothing Set qdf = Nothing Set db = Nothing Shell "explorer.exe """ & strOutputFolderPath & """", vbMaximizedFocus MsgBox "フォルダ'" & strOutputFolderPath & "'にPDFファイルを出力しました。", _ vbInformation, _ "実行完了" End Sub---------------------------------------------------------------- 以上のような感じでよろしいのではないかと。 引用: ちなみ、こちらのコマンドボタンの[クリック時]イベントで実行されているのは イベントプロシージャではなく埋め込みマクロですね。 |
![]() |
投稿日時: 23/09/07 11:46:00
投稿者: yurappy
|
---|---|
sk様
|