dポイントプレゼントキャンペーン実施中!

ACCESS2016で名簿管理を作製しています。選択クエリでID,名前、フリガナ、郵便番号、都道府県、住所、電話番号、メールアドレス、名簿に登録した年月日をフィールドに入れました。このクエリから登録した「ID」と「年月日」を毎回指定して印刷できるようにしたいと思っています。具体的には、印刷フォーム(F_印刷)を作成してそのフォームににはレポートを起動するためのボタンを配置しています。加えて、登録した年月日(〇〇年〇月〇日)は、非連結のテキストボックス(txt_登録日)とID(□~◇)は、非連結テキストボックス(txt_ID1、txt_Id2)を配置しました。印刷プレビューを表示させるため「F_印刷フォームのボタンをクリック」したとき、名簿印刷のレポート(R_宛名印刷)を起動させるように次のようにしました。

 Private Sub cmd_宛名ラベルプレビュー_Click()
    Dim strFilter1 As String
Dim strFilter2 As String

strFilter1 = Forms![F_印刷].txt_登録日
strFilter2 = "Between" & "Forms![R_宛名印刷]." & txt_ID! & " And Forms![R_宛名印刷]." & txt_ID2

Me.Filter = strFilter1 & " AND " & strFilter2

DoCmd.OpenReport "R_宛名印刷", acViewPreview
End Sub

また、フィルタを設定を引き継げるようにR_宛名印刷には、開くときに次のように

Private Sub Report_Open(Cancel As Integer)
    Me.Filter = Forms![F_印刷].Filter
   Me.FilterOn = True
End Sub

としていますが、機能しません。VBAを使用して、指定した、登録年月日とID(〇~〇のようにある範囲)の名簿を印刷できるようにしたいのですが、対策を教えていただけないでしょうか?
 よろしくお願いします。

A 回答 (5件)

フィールド名が指定してありませんね。


Forms![R_宛名印刷]." & txt_ID! も何でレポートなの?
あと、Forms![F_印刷].txt_ID1 のところも直しましょう。

フィールド名がわからないので、「会員ID」と「登録日」としました。

Private Sub cmd_宛名ラベルプレビュー_Click() で
Dim strFilter1 As String
Dim strFilter2 As String
Dim strFilter As String

strFilter1 = "([登録日]= #" & Forms![F_印刷].txt_登録日 & "#)"
strFilter2 = "([会員ID] Between " & "Forms![F_印刷].txt_ID1 & " And Forms![F_印刷].txt_ID2 & ")"
strFilter = strFilter1 & " AND " & strFilter2

抽出条件を与えて開きます。

DoCmd.OpenReport "R_宛名印刷", acViewPreview, , strFilter

ちなみに、Report_Open時の Filterは必要ありません。
    • good
    • 0
この回答へのお礼

ありがとうございました。丁寧な説明で大変よく理解できました。本当にありがとうございました。

お礼日時:2016/04/26 13:52

先の回答に誤りがありました。

すみません。
strFilter1 = "(登録した年月日フィールド名 = #" & me!txt_登録日 & "#)"
strFilter2 = "(ID Between " & me!txt_ID & " And " & me!txt_ID2 & ")"
Me.Filter = strFilter1 & " AND " & strFilter2
でした。
txt_登録日、txt_ID、txt_ID2の三つとも入力済みの場合だけ有効です。
debug.print me.filter
でイミディエイトウィンドウ(Ctrl + G で開きます)にフィルター文が出力されていますので
確認してみてください。

パラメータの入力を求められる件ですが、
『ID』という名前のフィールドが存在していないのでは?
    • good
    • 0
この回答へのお礼

ありがとうございました。時間がなくてすぐに試すことができませんでしたが、昨日試みたところうまくいきました。お礼が遅くなりましたが、改めてお礼を申しあげます。

お礼日時:2016/04/26 13:50

大前提として、F_印刷フォームとR_宛名印刷レポートのレコードソースに同じテーブル/クエリを指定している。


なら、

Private Sub cmd_宛名ラベルプレビュー_Click()
Dim strFilter1 As String
Dim strFilter2 As String

strFilter1 = "登録した年月日フィールド名 = #" & me!txt_登録日 & "#"
strFilter2 = "ID Between " & me!txt_ID & " And " & me!txt_ID2

Me.Filter = strFilter1 & " AND " & strFilter2
debug.print me.filter
DoCmd.OpenReport "R_宛名印刷", acViewPreview
End Sub

また、フィルタを設定を引き継げるようにR_宛名印刷には、開くときに次のように

Private Sub Report_Open(Cancel As Integer)
if currentproject.allforms("F_印刷").isloaded then
Me.Filter = Forms![F_印刷].Filter
   Me.FilterOn = True
end if
End Sub

としてみると?
    • good
    • 0
この回答へのお礼

せっかくアドバイスをいただいたのですが、残念ですがIDは「パラメーターの入力」を求める表示が出てきてしまいます。me!txt_ID1とme!txt_ID2を””や[]、' ' で囲っても同じ結果でした。さらに考えられるいろいろな方法を試みたいと思っています。

お礼日時:2016/04/17 19:38

えーと、クエリ上で



[フォーム1]![テキスト1]

みたいに指定すると、フォーム1にあるテキスト1というコントロールの値を参照することができます(フォームが開いている必要はありますが)。 なんか、リンクの例が悪かったみたいですね。 申し訳ありません。
    • good
    • 0
この回答へのお礼

お忙しいところありがとうございます。やはり、基本に戻って忠実にやらなければ無理なんでしょうか・・・・。

お礼日時:2016/04/17 18:47

フォーム上のデータをクエリの選択条件のところにあてはめて、


クエリをレコードソースにしたレポートを印刷すればいいんじゃないかな?
https://www.moug.net/tech/acopr/0040014.html
    • good
    • 0
この回答へのお礼

早速回答いただきありがとうございます。私の言葉足らずのため回答いただいたのに申し訳ありませんが、クエリで実行すると、「パラメーターの入力」が表示されそこで必要事項を入力することになります。この「パラメーターの入力」で入力するのではなく、テキストボックスなどを利用して登録年月日やIDを毎回入力して必要な名簿を印刷したいと考えています。

お礼日時:2016/04/13 20:14

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