Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


170 / 2272 ツリー ←次へ | 前へ→

【12695】レポートをグループ毎にpdf出力に関するVBAについて AWW 15/2/9(月) 14:21 質問[未読]
【12696】Re:レポートをグループ毎にpdf出力に関する... かるびの 15/2/11(水) 1:50 回答[未読]
【12697】Re:レポートをグループ毎にpdf出力に関する... AWW 15/2/11(水) 17:32 回答[未読]
【12698】Re:レポートをグループ毎にpdf出力に関する... かるびの 15/2/12(木) 2:53 回答[未読]
【12699】Re:レポートをグループ毎にpdf出力に関する... AWW 15/2/12(木) 21:05 回答[未読]
【12700】Re:レポートをグループ毎にpdf出力に関する... かるびの 15/2/13(金) 2:53 回答[未読]
【12701】Re:レポートをグループ毎にpdf出力に関する... AWW 15/2/14(土) 1:26 回答[未読]
【12704】Re:レポートをグループ毎にpdf出力に関する... かるびの 15/2/15(日) 1:27 回答[未読]
【12702】Re:レポートをグループ毎にpdf出力に関する... hatena 15/2/14(土) 3:36 回答[未読]
【12703】Re:レポートをグループ毎にpdf出力に関する... AWW 15/2/14(土) 15:31 回答[未読]
【12705】Re:レポートをグループ毎にpdf出力に関する... かるびの 15/2/16(月) 0:51 回答[未読]
【12706】Re:レポートをグループ毎にpdf出力に関する... AWW 15/2/17(火) 1:44 回答[未読]
【12707】Re:レポートをグループ毎にpdf出力に関する... かるびの 15/2/17(火) 2:06 回答[未読]
【12710】Re:レポートをグループ毎にpdf出力に関する... AWW 15/2/18(水) 8:59 回答[未読]
【12711】Re:レポートをグループ毎にpdf出力に関する... かるびの 15/2/19(木) 1:17 回答[未読]
【12713】Re:レポートをグループ毎にpdf出力に関する... AWW 15/2/19(木) 12:35 お礼[未読]

【12695】レポートをグループ毎にpdf出力に関する...
質問  AWW  - 15/2/9(月) 14:21 -

引用なし
パスワード
   お世話になります。

レポート出力で、支払明細書をグループ毎(コード毎)にpdf出力および
その時のファイル名を「コード.pdf」にしたいのですが、
インターネット上の情報を参考に試行錯誤しましたが
上手くいきませんでした。ご教授のほどよろしくお願いいたします。

レポート名:R_支払明細書
 ●コード(T_CODE)によるグループ設定しております。
 ●レコードソースをクエリ「Q_支払明細書用」に設定。


------------------------------------------------------------------------------------

Private Sub btnshiharai_Click()

Const QUERY_NAME = "Q_支払明細書用"
Const RPT_NAME = "R_支払明細書"
Const PDF_PATH = "C:\TEST\"

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

rs.Open "SELECT DISTINCT T_CODE FROM Q_支払明細書用", CurrentProject.Connection, adOpenStatic, adLockReadOnly
Do Until rs.EOF

pdfName = rs!T_CODE
DoCmd.OpenReport RPT_NAME, acViewPreview, , "T_CODE=" & rs!T_CODE, acWindowNormal
DoCmd.OutputTo acOutputReport, RPT_NAME, acFormatPDF, PDF_PATH & rs!T_CODE & ".pdf"
DoCmd.Close
rs.MoveNext

Loop


End Sub

------------------------------------------------------------------------------------
エラー箇所
「rs.Open "SELECT DISTINCT T_CODE FROM Q_支払明細書用", CurrentProject.Connection, adOpenStatic, adLockReadOnly」

エラー内容
「一つ以上の必要なパラメータの値が設定されておりません」

【12696】Re:レポートをグループ毎にpdf出力に関す...
回答  かるびの  - 15/2/11(水) 1:50 -

引用なし
パスワード
    ADOやPDF出力はよくわからないのですが。

>エラー箇所
>「rs.Open "SELECT DISTINCT T_CODE FROM Q_支払明細書用", CurrentProject.Connection, >adOpenStatic, adLockReadOnly」
>
>エラー内容
>「一つ以上の必要なパラメータの値が設定されておりません」

 このエラーって、クエリにおいて、そのクエリの基になったテーブルやクエリに
存在しないフィールドが使われているときに出るエラーですね。

 そこで、第1に、「Q_支払明細書用」クエリに「T_CODE」フィールドはありますか。

 第2に、「Q_支払明細書用」をデータベースウィンドウ(2003の場合)から開いた場合、
パラメータ入力ボックスが出ることなく、クエリを開けますか。
 パラメータ入力ボックスが出たとしたら、そこにフィールド名が表示されますが、
何というフィールドですか。
 そのフィールドは、「Q_支払明細書用」の基になったテーブル又はクエリに存在しますか。

【12697】Re:レポートをグループ毎にpdf出力に関す...
回答  AWW  - 15/2/11(水) 17:32 -

引用なし
パスワード
   回答ありがとうございます。
>第1に、「Q_支払明細書用」クエリに「T_CODE」フィールドはありますか。
→「Q_支払明細書用」クエリに「T_CODE」フィールドはあります。

>パラメータ入力ボックスが出ることなく、クエリを開けますか。
>パラメータ入力ボックスが出たとしたら、そこにフィールド名が表示されますが、
>何というフィールドですか。
→Accessは2007ですが、「Q_支払明細書用」クエリにはパラメータボックスを設定しております。説明不足でした失礼しました。実は、支払明細書を出力する際に、対象期間を設定するためのパラメータを設定しております。

具体的には
●パラメータ入力用フォーム「F_支払明細書」にテキストボックス「tx2開始日」と「tx2終了日」とそれを反映するコマンドボタンを設けている。

●「Q_支払明細書用」クエリの「UKEIREBI」フィールドの抽出条件に「Between [Forms]![F_支払明細書]![tx2開始日] And [Forms]![F_支払明細書]![tx2終了日]」と設定

●レポート「R_支払明細書」の”開く時”イベントに「 DoCmd.OpenForm "F_支払明細書", , , , , acDialog」を設定

つまり、レポート「R_支払明細書」を実行する時には、フォーム「F_支払明細書」が開き、「Q_支払明細書用」クエリにパラメータを設定しております。よってパラメータを設定しているフィールドは「Q_支払明細書用」クエリの「UKEIREBI」フィールドになります。

>そのフィールドは、「Q_支払明細書用」の基になったテーブル又はクエリに存在しますか。
→「Q_支払明細書用」クエリの「UKEIREBI」フィールドはテーブルに存在します。

以上よろしくお願いいたします。

【12698】Re:レポートをグループ毎にpdf出力に関す...
回答  かるびの  - 15/2/12(木) 2:53 -

引用なし
パスワード
   >●レポート「R_支払明細書」の”開く時”イベントに「 DoCmd.OpenForm "F_支払明細書", , , , ,
> acDialog」を設定
 原因はこれですね。

 レポートを開こうとすると、レポートのレコードソース、つまり「Q_支払明細書用」クエリ
が読み込まれます。
 その時点では、「F_支払明細書」フォームは開かれていません。
 そのため、「Q_支払明細書用」クエリ中の「F_支払明細書」や「tx2開始日」や「tx2終了日」が
何なのかアクセスは理解できません。
 それゆえ、「一つ以上の必要なパラメータの値が設定されておりません」とのエラーが出ます。

 対策ですが、
第1案は、R_支払明細書を開く前にF_支払明細書を開いておくことです。
 フォームでレポートを抽出条件を設定する場合、多くの人は次のような操作にするはずです。
つまり、R_支払明細書を開く前に、F_支払明細書フォームを開き、そこに抽出条件を入力し、
F_支払明細書に設けておいたコマンドボタンをクリックするなどしてR_支払明細書を開く
という操作にすると思います。
 第1案は、このような操作を踏襲する方法です。
 
 第2案は、レポートのレコードソースを後で設定する方法です。
 まず、レポートのデザインビューでレポートのレコードソースを""にしておきます。
 レポートのOpenイベントでF_支払明細書を開きます。
 F_支払明細書に所定の入力を済ませたら、
レポートのレコードソースとしてQ_支払明細書用を設定します。
 
 なお、「F_支払明細書に所定の入力を済ませたら」ということですが、
テキストボックスのAfterUpdateイベントを使うか、
F_支払明細書にコマンドボタンを設け、コマンドボタンのClickイベントを使うかすることになると
思います。

【12699】Re:レポートをグループ毎にpdf出力に関す...
回答  AWW  - 15/2/12(木) 21:05 -

引用なし
パスワード
   かるびの様
回答ありがとうございます。

もろもろ試行錯誤しながら試しましたが、同様の事象が発生しました。
(私のやり方が悪かったかもしれません。)

----------------------------------------------------------------------

第2案で言うと
「R_支払明細書」のレコードソースを""に設定し、

まず、メニュー画面から

1.コマンドボタンclickイベントで「F_支払明細書」を開く

Private Sub btnshiharai_Click()

DoCmd.OpenForm "F_支払明細書", , , , , acDialog

End Sub

2.「F_支払明細書」で対象期間の入力を行い、コマンドボタンのclickイベントで「R_支払明細書」のレコードソースを設定して、pdf出力の実行

Private Sub btnok_Click()

Dim MyReport As Report
Dim rs As ADODB.Recordset
Const QUERY_NAME = "Q_支払明細書用"
Const RPT_NAME = "R_支払明細書"
Const PDF_PATH = "C:\TEST\"


DoCmd.OpenReport "R_支払明細書", acViewDesign

'最小化するためにレポートを特定
DoCmd.SelectObject acReport, "R_支払明細書", False
'最小化
DoCmd.Minimize

Set MyReport = Reports!R_支払明細書

MyReport.RecordSource = "Q_支払明細書用"


Set rs = New ADODB.Recordset

rs.Open "SELECT DISTINCT T_CODE FROM Q_支払明細書用", CurrentProject.Connection, adOpenStatic, adLockReadOnly
Do Until rs.EOF

pdfName = rs!T_CODE
DoCmd.OpenReport RPT_NAME, acViewPreview, , "T_CODE=" & rs!T_CODE, acWindowNormal
DoCmd.OutputTo acOutputReport, RPT_NAME, acFormatPDF, PDF_PATH & rs!T_CODE & ".pdf"
DoCmd.Close
rs.MoveNext

Loop

End Sub

----------------------------------------------------------------------

因みにあまり意味のない情報かと思いますが、上記方法で「Q_支払明細書用」クエリのUKEIREBIフィールドの抽出条件(「Between [Forms]![F_支払明細書]![tx2開始日] And [Forms]![F_支払明細書]![tx2終了日]」)を消して実行してみると、グループ毎(T_CODE単位)のファイル名でpdf出力されましたが、各pdfファイルの中身はすべて全員分でございました。

お手数お掛けいたしますがよろしくお願いいたします。

【12700】Re:レポートをグループ毎にpdf出力に関す...
回答  かるびの  - 15/2/13(金) 2:53 -

引用なし
パスワード
    >「R_支払明細書」のレコードソースを""に設定し、
 私の説明が悪かったと思います。
 これは、レポートをデザインビューで開き、プロパティシートを開いて、
「データ」タブにおける「レコードソース」を空白にする
という操作をしてほしかったのです。
 「レコードソース」を空白にしたら、レポートをいったん保存してください。


 いくつか不明な点があるので、その確認です。
>まず、メニュー画面から
>
>1.コマンドボタンclickイベントで「F_支払明細書」を開く
 この「メニュー画面」って何でしょうか。
 メニュー用に作ったフォームのことですか。

>Private Sub btnshiharai_Click()
 コマンドボタン「btnshiharai」は、「メニュー」フォームに配置されたコマンドボタンですよね。

>Private Sub btnok_Click()
 コマンドボタン「btnok」は、F_支払明細書に配置されたコマンドボタンのことですよね。


 次に本題です。
 問題のエラーの原因を探りたいと思います。
 問題のエラーは、btnok_Clickイベントにおけるどの行で発生しますか。
やはり「rs.Open "SELECT DISTINCT T_CODE FROM Q_支払明細書用", CurrentProject.Connection, adOpenStatic, adLockReadOnly」の行でですか。
 
 F_支払明細書を開いてtx2開始日とtx2終了日に入力して、
フォーカスをtx2終了日以外に移した後、
F_支払明細書を閉じずに開いたまま、ナビゲーション・ウィンドウからQ_支払明細書用を開くと、
パラメータ入力ボックスが出てきますか。
 もし出てくるのであれば、「パラメータの入力」というキャプション(標題)の下、
テキストボックスの上に文字が表示されているはずですが、そこには何と表示されていますか。


>因みにあまり意味のない情報かと思いますが、上記方法で「Q_支払明細書用」クエリのUKEIREBIフィールドの抽出条件(「Between [Forms]![F_支払明細書]![tx2開始日] And [Forms]![F_支払明細書]![tx2終了日]」)を消して実行してみると、グループ毎(T_CODE単位)のファイル名でpdf出力されましたが、各pdfファイルの中身はすべて全員分でございました。
 これも結構致命的な不具合ですが、これについては、
「一つ以上の必要なパラメータの値が設定されておりません」
とのエラーの原因を突き止められてからにしましょう。



【12701】Re:レポートをグループ毎にpdf出力に関す...
回答  AWW  - 15/2/14(土) 1:26 -

引用なし
パスワード
   かるびの様

回答ありがとうございます。
確認事項の件ですが、


>まず、メニュー画面から
>
>1.コマンドボタンclickイベントで「F_支払明細書」を開く
 この「メニュー画面」って何でしょうか。
 メニュー用に作ったフォームのことですか。

→その通りでございます。総合メニュ‐になります。(F_総合)


>Private Sub btnshiharai_Click()
 コマンドボタン「btnshiharai」は、「メニュー」フォームに配置されたコマンドボタンですよね。

→その通りでございます。


>Private Sub btnok_Click()
 コマンドボタン「btnok」は、F_支払明細書に配置されたコマンドボタンのことですよね。

→その通りでございます。


>レポートをデザインビューで開き、プロパティシートを開いて、
>「データ」タブにおける「レコードソース」を空白にする
>という操作をしてほしかったのです。
>「レコードソース」を空白にしたら、レポートをいったん保存してください。

以下のように修正してみました。


----------------------------------------------------------

(1)総合メニューからボタンをクリックし、「R_支払明細書」のレコードソースを空白にして上書き保存、そして「F_支払明細書」を開く。(「R_支払明細書」のオープンイベントで「F_支払明細書」を開こうとしても開かなかったため)


Private Sub btnshiharai_Click()

Dim MyReport As Report

DoCmd.OpenReport "R_支払明細書", acViewDesign

Set MyReport = Reports!R_支払明細書

MyReport.RecordSource = ""

DoCmd.RunCommand acCmdSave

DoCmd.OpenForm "F_支払明細書", , , , , acDialog


End Sub


(2)「F_支払明細書」のテキストボックスtx2開始日とtx2終了日に指定期間を入力し、OKボタン(コマンドボタン)をクリック、下記処理を実施する。


Private Sub btnok_Click()

Dim MyReport2 As Report
Dim rs As ADODB.Recordset
Const QUERY_NAME = "Q_支払明細書用"
Const RPT_NAME = "R_支払明細書"
Const PDF_PATH = "C:\TEST\"

Set MyReport2 = Reports!R_支払明細書

MyReport2.RecordSource = "Q_支払明細書用"

Set rs = New ADODB.Recordset

rs.Open "SELECT DISTINCT T_CODE FROM Q_支払明細書用", CurrentProject.Connection, adOpenStatic, adLockReadOnly
Do Until rs.EOF

pdfName = rs!T_CODE
DoCmd.OpenReport RPT_NAME, acViewPreview, , "T_CODE=" & rs!T_CODE, acWindowNormal
DoCmd.OutputTo acOutputReport, RPT_NAME, acFormatPDF, PDF_PATH & rs!T_CODE & ".pdf"
DoCmd.Close
rs.MoveNext
Loop

End Sub

-------------------------------------------------------------------------


>問題のエラーは、btnok_Clickイベントにおけるどの行で発生しますか。
>やはり「rs.Open "SELECT DISTINCT T_CODE FROM Q_支払明細書用",
>CurrentProject.Connection, adOpenStatic, adLockReadOnly」の行でですか。

→その通りでございます。

>F_支払明細書を開いてtx2開始日とtx2終了日に入力して、
>フォーカスをtx2終了日以外に移した後、
>F_支払明細書を閉じずに開いたまま、ナビゲーション・ウィンドウから
>Q_支払明細書用を開くと、
>パラメータ入力ボックスが出てきますか。
> もし出てくるのであれば、「パラメータの入力」というキャプション(標題)の
>下、テキストボックスの上に文字が表示されているはずですが、そこには何と表示さ>れていますか。

→パラメータボックスはでてきません。tx2開始日とtx2終了日に指定した期間の抽出結果が表示されます。


お手数お掛けいたしますがよろしくお願いいたします。

【12702】Re:レポートをグループ毎にpdf出力に関す...
回答  hatena  - 15/2/14(土) 3:36 -

引用なし
パスワード
   かなり進んだ時点でのレスで申し訳ありません。

>------------------------------------------------------------------------------------
>エラー箇所
>「rs.Open "SELECT DISTINCT T_CODE FROM Q_支払明細書用", CurrentProject.Connection, adOpenStatic, adLockReadOnly」
>
>エラー内容
>「一つ以上の必要なパラメータの値が設定されておりません」

まず、エラーの原因ですが、ADOでパラメータクエリを開く時は、Parametersを設定する必要があります。
それをせずに開くと上記のエラーになります。

Access VBA:ADOでパラメータクエリーを実行してレコードセットを取得する方法
billyboy.blog81.fc2.com/blog-entry-159.html


今回の場合は、クエリには抽出条件を設定せずに、コードで設定したほうが楽になると思います。
また、レポートをプレビューが開いて閉じてを繰り返すのも無駄です。
クエリのSQLを直接書き換えて、DoCmd.OutputTo するのがお勧めです。

参考URL
レポートをグループ毎に分割してPDFファイルとして保存したい - hatena chips
hatenachips.blog34.fc2.com/blog-entry-380.html

【12703】Re:レポートをグループ毎にpdf出力に関す...
回答  AWW  - 15/2/14(土) 15:31 -

引用なし
パスワード
   hatena様

回答ありがとうございます。

実は、
レポートをグループ毎に分割してPDFファイルとして保存したい - hatena chips
hatenachips.blog34.fc2.com/blog-entry-380.html

は、以前拝見させていただき、まさにこれだと思い、参考に作成してみたのですが
私の知識不足で上手くいきませんでした。
今回、もう一度考え、試行錯誤して試しましたが、どうしてもわからない点がございます。

<作成したコード>
(Q_支払明細書用クエリの抽出条件を設定せずに)
----------------------------------------------------------------------

Private Sub btnshiharai_Click()
      
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim strFilter As String

  strFilter = "UKEIREBI Between #2015/02/01# And #2015/02/28#"

  Set db = CurrentDb
  Set rs = db.OpenRecordset("SELECT DISTINCT T_CODE FROM Q_支払明細書用 WHERE " & strFilter, _
               dbOpenForwardOnly, dbReadOnly)
  
  Do Until rs.EOF
    DoCmd.OpenReport "R_支払明細書", acViewPreview, , _
             strFilter & " AND T_CODE=" & rs!T_CODE, acWindowNormal
    DoCmd.OutputTo acOutputReport, "R_支払明細書", acFormatPDF, _
            "C:\TEST\" & Format(Date, "yyyymm") & "_" & rs!T_CODE & ".pdf"
    DoCmd.Close acReport, "R_支払明細書"
    rs.MoveNext
  Loop
  
  rs.Close

End Sub

----------------------------------------------------------------------

<どうしてもわからない点>
(1)変数「strFilter」に日付を任意で指定したいのですが、上手くできませんでした。
なので、strFilter = "UKEIREBI Between #2015/02/01# And #2015/02/28#"と日付をコードに直接書くことしかできませんでした。

(2)上記コードを実行すると「T_CODE」毎にパラメータ表示がされ、対象の「T_CODE」を入力すると、対象の「T_CODE」のpdf出力が実行されるのですが、対象が多いと非常に効率が悪いので、パラメータ表示せずに実行できるようにしたいです。

以上よろしくお願いいたします。

【12704】Re:レポートをグループ毎にpdf出力に関す...
回答  かるびの  - 15/2/15(日) 1:27 -

引用なし
パスワード
    クエリの操作方法としてQBF技法というのがあります。
 抽出条件としてフォームのテキストボックスを指定する方法のことです。
 Q_支払明細書用では、「UKEIREBI」フィールドの抽出条件に
   Between [Forms]![F_支払明細書]![tx2開始日]
     And [Forms]![F_支払明細書]![tx2終了日]
と設定しているそうですが、まさにQBF技法ですね。


 12702 のhatenaさんのレスを受けて、実験してみました。
 QBF技法を使ったクエリからレコードセットを開くというものです。
 そうしたところ、レコードセットを開くところで、
   実行時エラー -22147217904 (80040e10)
   1つ以上の必要なパラメータの値が設定されていません。
とのエラーになりました。

 なお、DAOでも試してみると、やはりレコードセットを開くところで
   実行時エラー 3061
   パラメータが少なすぎます。1を指定してください。
とのエラーになりました。


 結論として、QBF技法を使ったクエリは、ADOやDAOでは使えない
ということになります。

 私の不明により無駄なやり取りをさせてしまいました。申し訳ありません。

【12705】Re:レポートをグループ毎にpdf出力に関す...
回答  かるびの  - 15/2/16(月) 0:51 -

引用なし
パスワード
    hatena さん
 御指摘ありがとうございます。
 【12704】に書きましたが、ADOでもDAOでも、レコードセットを開くに当たり、
QBF技法を使ったクエリを基にすることはできないのですね。
 勉強になりました。

 AWW さん
>(1)変数「strFilter」に日付を任意で指定したいのですが、上手くできませんでした。
>なので、strFilter = "UKEIREBI Between #2015/02/01# And #2015/02/28#"と日付をコードに直接書くことしかできませんでした。
 ヒントです。

 「txt県名」という名前のテキストボックスに「青森県」と入力されていて、
「txt台数」という名前のテキストボックスに「30」と入力されていて、
strMojiretuという変数がString型の変数であるときに
   strMojiretu = "都道府県は" & txt県名.Value & "です。台数は" _
         & txt台数.Value & "です。"
というコードを実行すると、変数strMojiretuには、
   都道府県は青森県です。台数は30台です。
という文字列が格納されます。

 これを応用すれば、その都度異なる値をstrFilterに格納できます。

>(2)上記コードを実行すると「T_CODE」毎にパラメータ表示がされ、対象の「T_CODE」を入力すると、対象の「T_CODE」のpdf出力が実行されるのですが、対象が多いと非常に効率が悪いので、パラメータ表示せずに実行できるようにしたいです。
 「パラメータ表示がされ」というのは、パラメータ入力ボックスのことですか。
それともメッセージボックスのことですか。
 パラメータ入力ボックスというのは、小さなウィンドウで、
キャプション(標題)が「パラメータの入力」となっており、
その下にラベルがあり、アクセスが解釈できないフィールド名が表示され、
その下にテキストボックスがあり、
その下に「OK」のコマンドボタンと「キャンセル」のコマンドボタンが横に並んでいるウィンドウのことです。

 「パラメータ表示がされ」というのは、どのコードで表示されますか。
コードを1行ずつ実行して確認してみてください。


 コードを見る限り、またこれまでのやり取りでなされたQ_支払明細書用の定義内容からして、「T_CODE」フィールドについてパラメータ入力ボックスが出ることはないと思うんですよね。
 そこで、サンプルを作って実験してみました。
 もっとも、当方のアクセスは2003なので、OutputToメソッドでPDFに出力することができないため、テキストファイルに出力してみました。
 しかし、パラメータ入力ボックスは出ませんでした。

【12706】Re:レポートをグループ毎にpdf出力に関す...
回答  AWW  - 15/2/17(火) 1:44 -

引用なし
パスワード
   かるびの様

お世話になっております。

(1)変数「strFilter」に日付を任意で指定について

→時間をおいて、記載いただきましたヒントを基に再度試しましたらできました。前回できなかった理由は「#」を入れていなかったからでした・・・

strFilter = "UKEIREBI Between #" & tx2開始日.Value & "# And #" & tx2終了日.Value & "#"


(2)「T_CODE」毎にパラメータ表示がされる件

>「パラメータ表示がされ」というのは、パラメータ入力ボックスのことですか。
→パラメータ入力ボックスです。

>「パラメータ表示がされ」というのは、どのコードで表示されますか。
>コードを1行ずつ実行して確認してみてください。
→下記コードを実行したときに、「パラメータ入力ボックス」が表示されます。

DoCmd.OpenReport "R_支払明細書", acViewPreview, , _
strFilter & " AND T_CODE=" & rs!T_CODE, acWindowNormal

コード自体に問題がないとすると、
Q_支払明細書用の定義内容に問題があるのでしょうか。
試しにT_CODEではなく、別のフィールドGAICHUSHAMEIでも試してみましたが
同じように「パラメータ入力ボックス」が表示されました。

また、Q_支払明細書用は3つのテーブルから構成されます。
「T_CODE」フィールドは、3つのテーブルすべてに存在します。

あと少しの気がするのですが、なかなかゴールできなくて
やっぱりvbaは難しいですね。

【12707】Re:レポートをグループ毎にpdf出力に関す...
回答  かるびの  - 15/2/17(火) 2:06 -

引用なし
パスワード
   >また、Q_支払明細書用は3つのテーブルから構成されます。
>「T_CODE」フィールドは、3つのテーブルすべてに存在します。
 ひょっとして、Q_支払明細書用クエリには「T_CODE」フィールドが
テーブルの数だけあったりしませんか。
  
 Q_支払明細書用クエリのSQL文を提示してみてください。
 具体的には、Q_支払明細書用クエリをSQLビューで表示して、
そこに表示されるものをそのまま貼り付けてみてください。

【12710】Re:レポートをグループ毎にpdf出力に関す...
回答  AWW  - 15/2/18(水) 8:59 -

引用なし
パスワード
   かるびの様

ご連絡ありがとうございます。

 >ひょっとして、Q_支払明細書用クエリには「T_CODE」フィールドが
>テーブルの数だけあったりしませんか。
  
 >Q_支払明細書用クエリのSQL文を提示してみてください。
 >具体的には、Q_支払明細書用クエリをSQLビューで表示して、
>そこに表示されるものをそのまま貼り付けてみてください。


SELECT T外注者マスタ.T_CODE, T外注者マスタ.GAICHUSHAMEI_KANJI, T外注者マスタ.[Honorific title], T外注者マスタ.GINKOMEI, T外注者マスタ.GINKOSHITEN, T外注者マスタ.KOUZASHUBETSU, T外注者マスタ.GINKOSHUBETSU, T外注者マスタ.GINKOKOUZA, T_受入.UKEIRE_FLG, T_依頼.application, T_受入.Denpyo_No, T_受入.UKEIREBI, T_受入.amount_uke, T_受入.unit_value, [amount_uke]*[T_受入]![unit_value] AS total
FROM (T外注者マスタ INNER JOIN T_受入 ON T外注者マスタ.T_CODE = T_受入.T_CODE) INNER JOIN T_依頼 ON T_受入.Denpyo_No = T_依頼.Denpyo_No;

以上よろしくお願いいたします。

【12711】Re:レポートをグループ毎にpdf出力に関す...
回答  かるびの  - 15/2/19(木) 1:17 -

引用なし
パスワード
   >SELECT T外注者マスタ.T_CODE
>   , T外注者マスタ.GAICHUSHAMEI_KANJI
>   , T外注者マスタ.[Honorific title]
>   , T外注者マスタ.GINKOMEI
>   , T外注者マスタ.GINKOSHITEN
>   , T外注者マスタ.KOUZASHUBETSU
>   , T外注者マスタ.GINKOSHUBETSU
>   , T外注者マスタ.GINKOKOUZA
>   , T_受入.UKEIRE_FLG
>   , T_依頼.application
>   , T_受入.Denpyo_No
>   , T_受入.UKEIREBI
>   , T_受入.amount_uke
>   , T_受入.unit_value
>   , [amount_uke]*[T_受入]![unit_value] AS total
>FROM
>    (
>      T外注者マスタ
>    INNER JOIN T_受入
>    ON T外注者マスタ.T_CODE = T_受入.T_CODE
>    )
>   INNER JOIN T_依頼
>   ON T_受入.Denpyo_No = T_依頼.Denpyo_No;

 SELECT句に「T_CODE」フィールドが複数存在するのではないか
という予想を立てていたんですが、この予想ははずれですね。
 つまり、「T_CODE」フィールドが複数存在するために、
OpenReportメソッドのWhereCondition引数における
例えば「T_CODE=1234」という条件式における「T_CODE」フィールドが、
Q_支払明細書用クエリに複数存在する「T_CODE」フィールドのどれのことなのか
区別できないということで、
パラメータ入力ボックスが出たのではないかと予想したんですが。


 ちょっとお手上げ状態です。


 あと確認するとすれば、
「R_支払明細書」レポートをナビゲーションウィンドウから開くと、
「T_CODE」フィールドについてのパラメータ入力ボックスは出ますか。
  
 また、「R_支払明細書」レポートのフィルタプロパティを空白にしてから、
「R_支払明細書」レポートをナビゲーションウィンドウから開くと、
「T_CODE」フィールドについてのパラメータ入力ボックスは出ますか。

 さらに、R_支払明細書レポートのどこかのプロパティに
「T_CODE」フィールドを一度は設定したものの、
本当はそれを削除すべきなのに、
何らかの事情でそれが削除されずに残ったままになっている
ということはないですか。

 加えて、いろいろとレポートをいじっているうちにレポートが壊れてしまった
という可能性も考えられます。
 これへの対策としては、まずレポートを新規作成し、
R_支払明細書レポートのコントロールをコピーして、
新規に作成したレポートに貼り付けてみてください。

【12713】Re:レポートをグループ毎にpdf出力に関す...
お礼  AWW  - 15/2/19(木) 12:35 -

引用なし
パスワード
   かるびの様

ご連絡ありがとうございます。
別サイトで質問して何とか解決しました。

原因は、T_CODEフィールドのデータ型がテキスト型だったからのようです。


(変更前)

DoCmd.OpenReport "R_支払明細書", acViewPreview, , _
strFilter & " AND T_CODE=" & rs!T_CODE, acWindowNormal

(変更後)

DoCmd.OpenReport "R_支払明細書", acViewPreview, , _
strFilter & " AND T_CODE='" & rs!T_CODE & "'", acWindowNormal


いろいろとありがとうございました。
勉強になりました。

170 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078189
(SS)C-BOARD v3.8 is Free