人に聞けない痔の悩み、これでスッキリ >>

フォームフィルターでデータを抽出した後,抽出されたデータのみをレポート上に表示させるコマンドボタンをフォーム上に作っています。
下記のコードを作成しましたが,これだと抽出前の全部のデータが表示されてしまいます。
どうしたら良いでしょうか。

Private Sub ラベルプレビュー_Click()
Dim stDocName As String
DoCmd.Echo False,
stDocName = "rpt宛名ラベル"
DoCmd.OpenReport stDocName, acViewDesign
DoCmd.SelectObject acReport, stDocName, False '
Reports(stDocName).RecordSource = Me.RecordSource
DoCmd.OpenReport stDocName, acViewPreview
End Sub

このQ&Aに関連する最新のQ&A

A 回答 (3件)

Private Sub ラベルプレビュー_Click()


  Dim stDocName As String
  stDocName = "rpt宛名ラベル"
  If Me.FilterOn Then
    DoCmd.OpenReport stDocName, acViewPreview,,Me.Filter
  Else
    DoCmd.OpenReport stDocName, acViewPreview
  End If
End Sub
で、いかがでしょうか?
    • good
    • 0
この回答へのお礼

丁寧なご回答をありがとうございました。このとおりの記述をしたところ,できました!私のやり方では,よけいな記述をだらだらとしていたので,できなかったのでしょうか?また,質問の際には,よろしくお願いいたします。

お礼日時:2007/11/09 14:21

補足:



レポートで再フィルタするよりもネットワークトラフィックは混雑しないかと思います。

は、No1さんのやり方のことじゃないです。
No2とNo1は、実質的には同じだと思います。
    • good
    • 0

テーブル<Customer>



cuntomer_num__company_________kname_______zipcode__address1__address2__building__phone
______________101__スポーツランド__鈴木 一郎__150-_____東京都_____渋谷区____Aビル___(03)400-333
______________102__スポーツランド__岡島 一郎__150-____東京都_____渋谷区____Bビル__(03)400-444
______________103__スポーツランド__田中 一郎__150-_____東京都_____渋谷区____Cビル___(03)400-555

フォーム<Customer>

Private Sub コマンド_フィルタの実行_Click()
  Me.FilterOn = False
  Me.Filter = "kname Like '鈴木*'"
  Me.FilterOn = True
End Sub

Private Sub コマンド_レポートのプレビュー_Click()
On Error Resume Next
  Dim strSQL As String

  strSQL = "SELECT * FROM CUSTOMER"
  If Me.FilterOn Then
    strSQL = strSQL & " WHERE " & Me.Filter
  End If
  DoCmd.OpenReport "Customer", acPreview, , , , strSQL
End Sub

レポート<Customer>

Private Sub Report_Open(Cancel As Integer)
  Me.RecordSource = Me.OpenArgs
End Sub

ここでは、レポートのレコードソース情報をフォームのOpenArgs を利用して渡しています。
OpenArgs は、フォームフィルターを反映したSQL文。

これで、レポートにはフォームフィルタが反映されます。
レポートで再フィルタするよりもネットワークトラフィックは混雑しないかと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。私には,難しくて意味が良く分からないところがありますが,これからもよろしくお願いいたします。

お礼日時:2007/11/09 14:23

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESS フォームで抽出したデータのみをレポートで表示したい

初歩的な質問だとは思いますが、どうしてもできないので教えてください。

フォームで抽出条件をメインフォーム抽出結果をサブフォームに表示するフォームを作成しました。
このサブフォームで抽出したものだけをボタンをクリックするとレポート表示するように作りたいのですができません。

どうすればいいでしょうか?

Aベストアンサー

>レポートのプレビューで出力ボタンを作成したのですが、全てのデータが表示されます。
レポートのプレビューで出力ボタンを作成??意味が不明ですが。
>抽出条件を入力しても同じです。
レポートのレコードソースは抽出条件が入っているのでしょうか?抽出条件がなければ全レコード出力されてしまいます。
抽出条件はどのように入れてあるのでしょうか。
レポートのプロパティでレコードソースの右のボタンをクリックするとSQLステートメントが開きますので抽出条件のフィールドの抽出条件に
=[Forms]![メインフォーム名]![抽出条件のコントロール名]
と記述してください。(メインフォーム名・抽出条件のコントロール名は実際の名前に変えてください)
メインフォームにレポートを出力するボタンを作りそのレポートを設定すれば出来ます。

QACCESS でフォームフィルターをレポートに引き継ぐ方法

こんにちは。
いつもありがとうございます。

現在、ACCESSで名簿管理ソフトを作っています。
フォームで条件を指定し、該当する人を抽出できるようになっているのですが、その条件をそのままレポートのソースに使用するにはどうれすばいいでしょうか?

DoCmd.OpenReport "rpt_名簿", acViewPreview,, Me.Filter
としているのですが、実行時エラー 438が出てしまいます。

Aベストアンサー

発想を変えましょう
レポートの開くときイベントでフォームのフィルタを引き継げばいいのです

Private Sub Report_Open(Cancel As Integer)
Me.Filter = Forms![フォーム名].Filter
Me.FilterOn = True
End Sub

QAccessのレポート機能でソート&抽出条件を指定したい

accessでレポート機能について、質問です。
エクセルでいうフィルタ機能みたいなものはあるのでしょうか。

例えば、以下の場合、職位="B"だけレポートで表示したい場合、
どうすればよいのでしょう?
CD 職位 所属
01  A  東京
02  B  東京 → このデータだけを表示
03  A  大阪

1)クエリを作って、レポートで表示するしかないのでしょうか?
2)レポートのデザインで条件指定ができるのでしょうか?

ソートの条件も変えたいのですが、どの項目をソートするかは、
どこで指定できるのでしょうか?

要はレポートの形式は1つで、様々な抽出条件とソート条件で
レポート表示したいのです。

Aベストアンサー

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示したいのです。
1つレポートの雛形を作って、フィルタと並べ替えのプロパティと並べ替え/グループ化の設定を変えて保存し、複数のレポートを用意する。
入力した値によって変えたい場合は、フォーム上のテキストボックスの値や特定テーブルのレコードの値にを参照するクエリを作り、レポートのレコードソースにする。
またはVBAで処理する。

p.s.
レポートの表示をボタンで起動する場合、VBAやマクロを呼び出します。
VBAやマクロでレポートを開く時に、フィルタやWhere条件式を設定できます。

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示した...続きを読む

QACCESSで、フォームで抽出したものをレポートで印刷したいのですが・・・

現在、フォームでオプショングループを作成し、そこで選択されたものがフォーム上に表示(抽出)されるマクロを設定しています。今度ここで表示されたものをレポートにて印刷するために、またマクロを作ったのですが、エラーとなっていまい、レポートも表示されません。
そのマクロは、
アクションを「値の代入」
アイテムを「[Reports]![成績表].[FilterOn]」
式を「True」
とし、
2行目に
アクションを「値の代入」
アイテムを[Reports]![成績表].[Filter]
式を[Forms]![成績表].[Filter]
としました。

これはあるテキストに載ってたとおりにしたのですができませんでした。
どのようにすればよいのか教えてください。よろしくお願いします。

Aベストアンサー

> この方法はどのような場合にも通用するのでしょうか?
> とても便利なので感動したのですが。

どのような場合でもってわけじゃないですね。

フォームのフィルタプロパティを、レポートに渡していますので、
前提条件として、

○フォームとレポートのレコードソースが同一である
○フォームでフィルタプロパティを使っている
となります。

その条件であれば、使用することはできるはずです。

QACCESSで表示されているフォームだけをレポートに出したい

アクセスで、入力したフォーム内容をすぐにレポートで印刷できるよう、コマンドボタン作成ウィザードで、レポートの操作→レポートのプレビューを行ったのですが、IDが1のものが表示されてしまいます。。
これを、表示されているフォームIDのものをプレビューさせることはできますでしょうか?

色々調べてみたのですが、分からなかったので。。
宜しくお願いします!

Aベストアンサー

> 色々調べてみたのですが、分からなかったので
調べ方が良くなかったのでしょうね
ウィザードで作成すると
Private Sub コマンド61_Click()
On Error GoTo Err_コマンド61_Click

Dim stDocName As String

stDocName = "フォーム名"
DoCmd.OpenReport stDocName, acPreview

Exit_コマンド61_Click:
Exit Sub

Err_コマンド61_Click:
MsgBox err.Description
Resume Exit_コマンド61_Click

End Sub
こんなコードが出来ていると思います。
それぞれの単語の上にカーソルを持っていって、F1 キーを押すとそれぞれのヘルプが
現れます。
でAccess2002の場合ですが、OpenReportのヘルプで
WhereCondition で何かを指定すると何とかなりそうなのが分かります。
関連項目を見ると「"OpenReport/レポートを開く" アクション」が有ります。
ここに貴方の望むものが載っています。
ヘルプより抜粋
-------------------------
レポートを開き、レポートのコントロールの値を使ってレコードを制限するには、次の構文を使用します。

['(フィールド名)'] = Forms!['(フォーム名)']!['(フォームのコントロール名)']

'(フィールド名)' には、開くレポートの基になるテーブルまたはクエリにあるフィールド名を指定します。
<フォームのコントロール名> には、レポートのレコードを制限するための値を持つ、フォームのコントロール名を指定します。
--------------------------
なので
DoCmd.OpenReport stDocName, acPreview

DoCmd.OpenReport stDocName, acPreview, , "[ID]=" & Forms![フォーム名]![ID]
にすれば良いのが分かるかと思います。なお、下記の書き方もあります
DoCmd.OpenReport stDocName, acPreview, , "[ID]=" & Me!ID

> 色々調べてみたのですが、分からなかったので
調べ方が良くなかったのでしょうね
ウィザードで作成すると
Private Sub コマンド61_Click()
On Error GoTo Err_コマンド61_Click

Dim stDocName As String

stDocName = "フォーム名"
DoCmd.OpenReport stDocName, acPreview

Exit_コマンド61_Click:
Exit Sub

Err_コマンド61_Click:
MsgBox err.Description
Resume Exit_コマンド61_Click

End Sub
こんなコードが出来ていると思います。
それぞれの単語の上...続きを読む

Qaccess マクロでのフィルタの解除の方法

フィルタをかける時は、

***************************
アクション:フィルタの実行
フィルタ名:なし
Where条件式:[フィールド1]="あ"
***************************

で、できますが、
フィルタを解除する時はどのようなマクロを作ればいいのでしょうか?

VBAでやるなら、
Me.Form.FilterOn = False
をマクロでやりたいです。

アドバイスよろしくお願いします。

Aベストアンサー

> VBAでやるなら、
> Me.Form.FilterOn = False
> をマクロでやりたいです。

ご質問の趣旨が「並べ替えは維持した状態で、フィルタだけ解除したい」という
ことでしたら、以下の方法で対応できます。


a)フィルタの解除専用の場合
***************************
アクション:コマンドの実行
コマンド:フィルタをすべて解除
***************************
※フィルタが適用されていない状態で実行するとエラーになります。
  (コマンドボタンで実行させる場合、フィルタ未適用時はボタンを使用不可
  にするか、マクロの『条件』欄に「~.FilterOn = True」の記述が必要、と)
  また、フォームのプロパティシートの『データ』タブにある『フィルタ』欄(VBAでの
  Me.Form.Filterに相当)に設定された文字列も削除されます。


b)フィルタの適用/解除を交互に切り替える場合
***************************
アクション:コマンドの実行
コマンド:フィルタの実行/解除
***************************
※当該フォームにフィルタが設定されていない場合、エラーとなります。
 (フォームのプロパティシートの『データ』タブにある『フィルタ』欄に
  フィルタとなる文字列が設定されていればOk:)
 (フィルタが適用済みなら解除、解除済みなら適用、となります)


因みに、マクロのデザインビューで、『デザイン』リボンの『表示/非表示』グループ
内にある『すべてのアクションを表示』をオンにしてもよいのでしたら、以下の
方法もあります。
(VBAでの方法をご存知の上でマクロで対応ということは、勤務先のセキュリティ
 方針によるものかと思いますので、この方法も不可かもしれませんが(汗))

***************************
アクション:値の代入
アイテム:Forms!フォーム名.Form.FilterOn
式:False
***************************

※サブフォームの場合の『アイテム』は以下のようになります:
 Forms!フォーム名!サブフォームコントロール名.Form.FilterOn

> VBAでやるなら、
> Me.Form.FilterOn = False
> をマクロでやりたいです。

ご質問の趣旨が「並べ替えは維持した状態で、フィルタだけ解除したい」という
ことでしたら、以下の方法で対応できます。


a)フィルタの解除専用の場合
***************************
アクション:コマンドの実行
コマンド:フィルタをすべて解除
***************************
※フィルタが適用されていない状態で実行するとエラーになります。
  (コマンドボタンで実行させる場合、フィルタ未適用時はボタンを使用不可
  にするか、...続きを読む

QACCESSでVBAから選択クエリの抽出条件を指定したい

選択クエリの抽出条件はデザインビューの「抽出条件」欄に直接条件式を書き込むのが普通だと思いますが、この条件式をVBAで記述することは出来るでしょうか?

DoCmd.RunSQL ではアクションクエリしか実行できないようだし、
DoCmsOpenQuery では引数に抽出条件を指定することが出来ないし困っています。

Aベストアンサー

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてます(^^)

ちなみに、
Me.
と打ち込んだ時点でオートコンプリート(名称あってるかな~)
機能が働いて参照できるオブジェクトが表示される
はずです。
その中にKojiさんが書いた埋め込みオブジェクトが
きっとあるはず
もしかすると"FormA"とか名前を付けたつもりでも
Visual Basic Editor君が気を利かせて
Form_formA
とかになってる場合があります。
最近やってないんでうろ覚えなんですが、こんな処を注意すれば大丈夫!

追伸
このコードって検索とかで使えますから
覚えておくときっと役に立ちますよ♪

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてま...続きを読む

Qアクセスで特定のレコードのみのレポートを印刷したいのですが。

アクセス2003である特定のレコードのみのレポートを印刷したいと思っています。現在開いているフォームのレコードのみを印刷(レポートとして)印刷するには、ファイル→印刷→ページ指定で現在印刷しているのですが、他に方法はないでしょうか?単に「レポートの印刷」とすると全てのレコードが印刷されてしまいます。今のところ特定のレコードのみ印刷するには、まずページ数を調べなければいけないので不便です。せっかくパラメータクエリなどで、そのレコードのフォーム画面を表示させても、レポート印刷につながらないので、どなたか良い方法を教えていただけないでしょうか?よろしくお願いいたします。

Aベストアンサー

レポートの基となるクエリを開きます。
フォームに表示されている項目の中で主キーとなるフィールドがどれかを決めます。
そのクエリの中でその主キーフィールドのWHERE条件の欄を選択してビルドを開きます。
レポートを選択するフォームの一覧を開きます。
先ほど選んだ主キーの項目を選んでダブルクリックします。
Ok
そうすれば、フォームから印刷ボタンを押せば開いているページだけが印刷されます。
但し、複数ページの指定をするには、更に複雑な設定が必要ですが、
今の照会した方法を応用すればできるはずです。

QAccess フォームで条件抽出したものを印刷プレビューしたい

条件抽出したフォームを印刷プレビューしたいのですが、プレビューすると
全データが表示されてしまいます。
出来ればフォームのままプレビューしたいのですが、この場合は、
別にレポートを作成しないとダメでしょうか?

1.メインフォームにサブフォームを組み込んであります。
2.サブフォームはクエリに関連させています。
3.コマンドボタン[印刷]で印刷プレビューを表示させたい。

メインフォーム:商品
サブフォーム:取引商品
クエリ:商品リスト


-----コマンド[印刷]のイベント-----
Private Sub cmdPrint_Click()
'商品取引記録を印刷プレビューで開く
DoCmd.OpenForm "商品", acViewPreview, Me.Filter
End Sub

Aベストアンサー

#1です

動作検証はしてなかったのですが・・・

> DoCmd.OpenForm "商品", acViewPreview, , Me.Filter
> としても、全データの表示がされてします・・・。

DoCmd.OpenForm Me.Name, acPreview

だけで、行けるね・・・
acViewPreviewと、 acPreviewは、結果、同じ値みたいだけど、バージョンの違いなのかな?

QACCESSサブフォームにデータ反映されない

よろしくお願いします。

Access2010を使っています。
メインフォームにあるテキストボックス2つに条件を入力し、
抽出したデータをサブフォームで表示させたいと思います。

●メインフォーム名「フォーム1」
テキストボックス2つ「tex1」「tex2」

●データ元クエリ「q1」
フィールド名「ID1」「ID2」「Name」

●サブフォームSQL
SELECT q1.Name
FROM q1
WHERE (((q1.ID1) = Forms![フォーム1]!tex1) And
((q1.ID2) = Forms![フォーム1]!tex2)));


フォームを開き、tex1とtex2に入力してもサブフォーム表示が変わりません。
サブフォームをデータシートで別に開くと、データ抽出できていることは確認できました。

サブフォームのコントロールソースへSQLを入力するだけでは、
メインフォーム内でのデータは反映されないんでしょうか??

Aベストアンサー

>サブフォームをデータシートで別に開くと、
>データ抽出できていることは確認できました。

の部分がよくわかりませんが。


普通は、たとえば、
メインフォームにボタンを一つ
設定し、そのボタンのクリックイベントで、

Private Sub コマンド0_Click()
Me!埋め込み0.Requery
End Sub

のように設定します。
ここで、「埋め込み0」というのはメインフォームの
デザインビューでサブフォームを表示するために
設定するコントロールのことで、サブフォーム
そのもではありません。初期値は「埋め込み0」
のような名前になっています。サブフォームと
同じ名前に設定しているならば、「埋め込み0」
のところをサブフォームと同じ名前に置き換えても
かまいません。


そのほかには、「tex2」の更新後処理に同様に、

Private Sub tex2_AfterUpdate()
Me!埋め込み0.Requery
End Sub

のように設定してもいいのですが、この場合には
「tex2」に入力後、一旦フォーカスを移動させる
必要があります。たとえば「tx1」にマウスを
移動させてクリックするとか。それによって
「tex2」の更新後処理が起動されます。

>サブフォームをデータシートで別に開くと、
>データ抽出できていることは確認できました。

の部分がよくわかりませんが。


普通は、たとえば、
メインフォームにボタンを一つ
設定し、そのボタンのクリックイベントで、

Private Sub コマンド0_Click()
Me!埋め込み0.Requery
End Sub

のように設定します。
ここで、「埋め込み0」というのはメインフォームの
デザインビューでサブフォームを表示するために
設定するコントロールのことで、サブフォーム
そのもではありません。初期値は「埋め込み0」
のよう...続きを読む


人気Q&Aランキング