Access VBA質問箱 IV

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

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


31 / 500 ページ ←次へ | 前へ→

【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出力が実行されるのですが、対象が多いと非常に効率が悪いので、パラメータ表示せずに実行できるようにしたいです。

以上よろしくお願いいたします。
・ツリー全体表示

【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
・ツリー全体表示

【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終了日に指定した期間の抽出結果が表示されます。


お手数お掛けいたしますがよろしくお願いいたします。
・ツリー全体表示

【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ファイルの中身はすべて全員分でございました。
 これも結構致命的な不具合ですが、これについては、
「一つ以上の必要なパラメータの値が設定されておりません」
とのエラーの原因を突き止められてからにしましょう。


・ツリー全体表示

【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ファイルの中身はすべて全員分でございました。

お手数お掛けいたしますがよろしくお願いいたします。
・ツリー全体表示

【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イベントを使うかすることになると
思います。
・ツリー全体表示

【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」フィールドはテーブルに存在します。

以上よろしくお願いいたします。
・ツリー全体表示

【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_支払明細書用」の基になったテーブル又はクエリに存在しますか。
・ツリー全体表示

【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」

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

【12694】Re:クエリ列見出しをVBAで設定したい
お礼  たか21  - 15/2/6(金) 0:34 -

引用なし
パスワード
   PIVOT句の文字列変更の方法で、
プルダウンリストに同期した列見出しを変更し、
クロス集計出来るようになりました。

有難う御座いました。
・ツリー全体表示

【12693】Re:クエリ列見出しをVBAで設定したい
お礼  たか21  - 15/2/5(木) 18:54 -

引用なし
パスワード
   自分でも調べるべき事柄なのですが、
調査を含めてご教授有難うございます。
(スキルは自己流そもそも論が分かっていないのが実態)

DAOのQueryDefオブジェクトのSQLプロパティのPIVOT句を
見つける事は出来ました。

このPIVOT句を変更すれば、可能という事ですね。
SQL文自体を変更するという事なので、
デグレのリスクを十分考慮し、文字列置換で対処出来るか試してみます。

わがままを言えば、画面で操作するように、
列見出しだけを変更したいです。

有難う御座います。
・ツリー全体表示

【12692】Re:クエリ列見出しをVBAで設定したい
回答  かるびの  - 15/2/5(木) 1:47 -

引用なし
パスワード
   >クロス集計クエリのプロパティーシートの
>クエリ列見出しの値の設定をVBA(処理論理)で行うロジックを教えて頂きたいです。
 クロス集計クエリのプロパティーシートにおける「クエリ列見出し」プロパティですが、
このプロパティが何というオブジェクトのプロパティかがわかれば、できると思います。
 そこで、AllQueries コレクションやDAOの QueryDef オブジェクトを調べてみましたが、
「クエリ列見出し」プロパティが属するオブジェクトは探し出せませんでした。
 なお、AccessObjectProperties コレクションに「クエリ列見出し」プロパティが
含まれるかどうかは調べていません。
 もっと丹念に探せば、見つけられるかもしれませんが、
現時点での私の結論としては、プロパティーシートの「クエリ列見出し」プロパティの設定を
VBAで行うことはできないということになります。

 なお、テーブルやクエリのプロパティ設定をVBAで行おうとしても、できないことが多いです。
もっとも、これは私が知らないだけなのかもしれませんが。


 ただ、フォームからであれば、
クロス集計クエリの列見出しを自由に設定することが可能です。
 例えば、フォームにコンボボックスとコマンドボタンが配置されていて、
コンボボックスには各値が格納されているときに、
コマンドボタンをクリックすると、
コンボボックスに格納されている各値が列見出しとなったクロス集計クエリが開く
という動作をさせることは、VBAを使って実現可能です。

 ヒントを上げておくと、
DAOの QueryDef オブジェクトの SQL プロパティ、
SQL文における TRANSFORM ステートメント中の PIVOT 句
です。
・ツリー全体表示

【12691】クエリ列見出しをVBAで設定したい
質問  たか21  - 15/2/4(水) 23:30 -

引用なし
パスワード
   はじめまして。ご教授お願いします。

<依頼>
クロス集計クエリのプロパティーシートの
クエリ列見出しの値の設定をVBA(処理論理)で行うロジックを教えて頂きたいです。

<目的>
プルダウンリスト値毎の件数を集計し横に並べて一覧化する。
この際、プルダウンリスト値が変更される度に列見出しを手修正しなければいけない。
これを、自動化したいのです。
・ツリー全体表示

【12690】Re:商品ごとの合計金額
回答  かるびの E-MAIL  - 15/1/29(木) 1:18 -

引用なし
パスワード
   >【12689】初心者です
 こんなタイトルでは、質問内容が全くわかりません。
 タイトルは、質問内容を表すものにしてください。

>果物を売るとします。りんご、なし、ぶどう・・・etc
>それらの販売価格が、店舗ごとに違う場合、
 これって、りんごの単価が店舗Aでは100円、店舗Bでは90円ということですか。


>それぞれの果物の売上額合計を出すにはどうすればよろしいのでしょうか。
 テーブル構成を、
  T売上
    売上ID   オートナンバー型(主キー)
    年月日   日付型
    店舗ID   長整数型

  T店舗
    店舗ID   オートナンバー型(主キー)
    店舗名   テキスト型

  T売上明細
    売上明細ID オートナンバー型(主キー)
    売上ID   長整数型
    商品ID   長整数型
    数量    整数型

  T商品
    商品ID   オートナンバー型(主キー)
    商品名   テキスト型

  T単価
    単価ID   オートナンバー型(主キー)
    商品ID   長整数型
    店舗ID   長整数型
    単価    長整数型又は通貨型
とします。
 次に、これらのテーブルを結合したクエリ(Q全売上)を作ります。
なお、テーブルを結合するときは、テーブル同士の関係をよく見極め、
一対多の関係が何層にも重なっていくようにテーブルを結合させてください。
つまり、一対多対一とか、多対一対多とかになっては駄目ということです。、        
 さらに、Q全売上には、単価*数量という式の演算フィールド(フィールド名:売上額)を設けます。
 フォームのレコードソースにQ全売上を設定します。

 
 合計売上金額をどこに表示したいのかがわかりませんが、
テキストボックスに表示したいなら、テキストボックスのコントロールソースに
=DSum("売上額","Q全売上","商品ID=1")
などと設定します。
 サブフォームに表示したいなら、
Q全売上を元にして、商品IDごとに「売上額」フィールドの値を合計する集計クエリ(Q集計)を作り、
サブフォームコントロールのSourceObjectプロパティに指定したフォーム
のレコードソースにQ集計を設定します。
・ツリー全体表示

【12689】初心者です
質問  雅子  - 15/1/27(火) 22:36 -

引用なし
パスワード
   失礼致します。access初心者です。
もしよかったらご教授下さいませ。

果物を売るとします。りんご、なし、ぶどう・・・etc
それらの販売価格が、店舗ごとに違う場合、それぞれの果物の売上額合計を出すにはどうすればよろしいのでしょうか。
理想は、フォームで売上を入力するとして、
1 果物の種類(りんごなど)
2 販売店舗(店舗A、店舗Bなど)
3 数量
を入力すれば合計売上金額が自動計算される、みたいなものをイメージしています。

なにとぞよろしくお願い致します。
・ツリー全体表示

【12688】Re:同行のデータに優先順位をつけてのソ...
回答  Hiro  - 15/1/27(火) 13:36 -

引用なし
パスワード
   ▼独覚 さん:

お返事ありがとうございます。
補足します。
Access初心者のため、まだ言葉足らずの部分があるかもしれませんが
よろしくお願いします。


>▼Hiro さん:
>.OrderByプロパティはそのフォームのレコードソースのファイルまたはクエリのフィールド名
>だったはずだけど。
>
>お書きのVBAだと"1"または"9999"という名前のフィールドで並べ替えようとするよ。
>
>サブリストに表示させるのをクエリにしてクエリのフィールドとして並べ替えの基準を
>入れてはどうだろう?

サブリストのレコードソースに登録詳細情報というクエリをセットしています。
そのクエリのフィールドに型式コードがありますので、cmbKatashikiの値と同じコードを1とし、
その他を9999と昇順でソートすればcmbKatashikiの値の順位が先頭となり、
その他が以降に表示されると考えました。

お話を聞いているとswitch文の使い方が間違えているようなので、
クエリのフィールドに並べ替えの基準を入れるようにしてみました。

ORDER BY Switch([登録情報].[型式コード]=[Forms].[メニュー].[cmbKatashiki].[Value],1,True,99);

を登録詳細情報クエリに追記したのですが表示される一覧は優先順位でソートされていませんでした。

[Forms].[メニュー].[cmbKatashiki].[Value]を固定値に変更してみるとナビゲーションウィンドウから
クエリを実行した場合優先順位でソートされ表示されるのは確認できました。


>
>あと、こういう場合はパラメータの入力ダイアログでなんというパラメータの値を求めているかも
>書いたほうがいいよ。

>訂正です。
>
>>"1"または"9999"という名前のフィールドで並べ替えようとするよ。
>こうなるのは
>
> .OrderBy = Switch(型式コード = & Me.cmbKatashiki.Value & ,1,True,9999)
>の場合ですね。
>
>今回の場合は
>Switch(型式コード = cmbKatashikiの値 ,1,True,9999)
>というフィールドの値を聞いてくるのかな?

パラメータの入力ダイアログはSwitch(型式コード = cmbKatashikiの値 ,1,True,9999)
と表示されていましたので、仰る通りフィールドの値を聞いてきていると思います。
・ツリー全体表示

【12687】Re:同行のデータに優先順位をつけてのソ...
発言  独覚  - 15/1/27(火) 10:35 -

引用なし
パスワード
   訂正です。

>"1"または"9999"という名前のフィールドで並べ替えようとするよ。
こうなるのは

 .OrderBy = Switch(型式コード = & Me.cmbKatashiki.Value & ,1,True,9999)
の場合ですね。

今回の場合は
Switch(型式コード = cmbKatashikiの値 ,1,True,9999)
というフィールドの値を聞いてくるのかな?
・ツリー全体表示

【12686】Re:同行のデータに優先順位をつけてのソ...
発言  独覚  - 15/1/27(火) 10:12 -

引用なし
パスワード
   ▼Hiro さん:
.OrderByプロパティはそのフォームのレコードソースのファイルまたはクエリのフィールド名
だったはずだけど。

お書きのVBAだと"1"または"9999"という名前のフィールドで並べ替えようとするよ。

サブリストに表示させるのをクエリにしてクエリのフィールドとして並べ替えの基準を
入れてはどうだろう?

あと、こういう場合はパラメータの入力ダイアログでなんというパラメータの値を求めているかも
書いたほうがいいよ。
・ツリー全体表示

【12685】同行のデータに優先順位をつけてのソート
質問  Hiro  - 15/1/27(火) 9:22 -

引用なし
パスワード
   メニューフォームのサブリストに登録情報の一覧を表示しています。
その一覧で表示しているデータを優先順位をつけて並び変えをしたいのですがうまくいかずに困っています。
型式コード(Me.cmbKatashiki.Value)のデータを先頭に表示し、
他の型式コードはその下位に並べるようにしたいのです。
以下のように記述をしてみました。

  With Forms!メニュー!subList.Form
    .OrderBy = " Switch(型式コード = " & Me.cmbKatashiki.Value & ",1,True,9999)"
    .OrderByOn = True
    .Filter = sFilter
    .FilterOn = True
  End With

実行を行ってみるとポップアップウィンドウでパラメータの入力画面が表示されます。
どのようにすればよろしいでしょうか?

よろしくお願いします。
・ツリー全体表示

【12684】Re:一つの条件で複数検索
お礼  kok  - 15/1/15(木) 10:00 -

引用なし
パスワード
   ▼かるびの さん:

正月休みに一度頭をリセットしました。
前回私の書いた式ではダメということなので、一番初めから間違っていることだとわかりました。


自分なりになぜわからないのか纏めてまみした。

まず、Filterプロパティを自分は理解していないこと。
調べたら、Me.Filter ="対象フィールド名 = 抽出条件" ということになるのがわかりましたが、前回も書いた strWhere という変数がいきなり出てきて混乱を招いています。

変数ですから宣言をし、変数に格納する式を作り、Filterプロパティに変数を組み合わせるという工程でいかなければならないですね。

そもそも、最初の質問にテーブルやフォームの構成を書きましたが、検索するにはこんな複雑にしないといけないレベルなのでしょうか?


そして最近では、Filterプロパティのレクチャーのみで自分の質問とかけ離れてしまったような感じがします。


まず、自分が変数を使わないFilterプロパティを勉強してから教えていただいたものを理解していく順序じゃないと、いくら説明されてもわからないと思いますので、この質問はここで締め切らせて下さい。
長々とお付き合いしていただきありがとうございました。
・ツリー全体表示

31 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free