質問者
[Access2010 PDF出力]OutputTo実行時のError2501について

質問
-
Access2010を使用し、vbaで以下のことを実現しようとしています。
・検索画面から検索条件を取得し、TEST_TABLEの情報を、"レポート帳票"というレポート形式に沿って、PDF出力する
・TEST_TABLEにあるIDカラムごとに異なるファイル名で複数出力する
下記のコードを実行すると、成功するときと失敗するときがあります。(成功/失敗の成否要因がつかめていません)
デバッグ実行を行い、失敗するときはDoCmd.OutputToの箇所で、エラーコード"2501"が発生することを確認しています。
Closeが完了する前にOpenReportが実行されることで発生しているのかと思い、ループごとに10秒の待ち時間を入れてみましたが回避できませんでした。
原因、回避策についてご教示いただければと思っております。
OSはWindows10, Windows7で現象(失敗)が再現することを確認しております。
よろしくお願いいたします。
'''''''''''''''''''''''''''下記コード''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim strWhere As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
'///////この間のコードで、検索条件を抽出し、strWhereに格納////
Dim strSql As String
'IDの一覧抽出
strSql = strSql & "SELECT DISTINCT ID FROM TEST_TABLE"
'IDごとにファイルを分割する
rs.Open strSql, CurrentProject.Connection, adOpenStatic, adLockReadOnly
'1件もなければエラー終了
If (rs.BOF = True) And (rs.EOF = True) Then
MsgBoxEx "印刷データ件数 0件", "", _
vbOKOnly + vbExclamation, pcstrAppName
Exit Sub
End If
'IDの数だけループ
Do Until rs.EOF
On Error Resume Next
'レポートの形式で出力
DoCmd.OpenReport "レポート帳票", acViewReport, , strWhere & " AND ID = '" & rs!ID & "'", acWindowNormal
'PDF形式に変換
DoCmd.OutputTo acOutputReport, "レポート帳票", acFormatPDF, "C:\test\PDFファイル" & i & ".pdf"
DoCmd.Close acReport, "レポート帳票"
i = i + 1
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
- 編集済み naka10 2017年8月8日 6:44
すべての返信
-
このように成功する場合と失敗する場合があるとき、現象を再現できる条件が明確でないと、原因を特定するは難しいですね。
とりあえず、気になるのは、レポートビュー(acViewReport)で開いている点、ここはプレビュー(acViewPreview)に変更してみて試してみてください。
あと、レポートビュー(プレビュー)で開くことが必須でないなら、レコードソースのSQLを書き換えて、OutputToする方法を推奨します。処理もこの方が高速です。
コード例(前後は省略)Dim db As DAO.Database Dim qd As DAO.QueryDef Set db = CurrentDb Set qd = db.QueryDefs("レコードソースのクエリ") strSQL = Replace(qd.SQL, ";", "") 'IDの数だけループ Do Until rs.EOF On Error Resume Next 'レコードソースのクエリにWHERE句を追加 qd.SQL = sSQL & " WHERE " & strWhere & _ " AND ID = '" & rs!ID & "'" 'PDF形式で出力 DoCmd.OutputTo acOutputReport, "レポート帳票", _ acFormatPDF, "C:\test\PDFファイル" & i & ".pdf" i = i + 1 rs.MoveNext Loop 'クエリのSQLを元に戻す qd.SQL = strSQL & ";"
参考