ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

Accessでメインレポートとサブレポートがあるレポートを作っています。
メインレポートのページが変わるたびに、サブレポートのレコードソースを変更して、サブレポートの再表示をさせたいのですが、どうやればいいのでしょうか?
ちなみにメインのほうで以下のように記述しましたが、
(3)でエラーになります。
(エラー内容:記述ミス、または開いていない)

Private Sub Report_Page()
(1) Dim strSQL As String
(2) strSQL = "SELECT * FROM Meisai" _
& " WHERE DenNo = " _
& Format(Reports!r日報!DenNo.Value, "000000")
(3) Reports!r明細!.RecordSource = strSQL

End Sub

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

A 回答 (1件)

Report_Pageイベントは


>レポートのページが形式を整えられて印刷されるまでの間に発生します。
(Accessのヘルプより)
ので、再表示させたい場合には適切でないと思います。

サブレポートが含まれるセクション(ヘッダー、詳細、フッター等)のFormatイベントを使ってみたらどうなりますか?
    • good
    • 0
この回答へのお礼

momooさん:
どうもありがとうございました。

お礼日時:2009/06/05 15:12

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

レポート」に関するQ&A: レポートの書き方

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

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

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

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

QACCESS2000 VBAで印刷時にサブレポートのレコードソースを設定するには?

 フォーム画面にある複数の入力項目から検索条件文を作成、データを抽出してレポートに明細一覧を出力します。
 親レポートはDoCmd.OpenReportのConditionで設定出来るのですが、そのレポートフッターにはサブレポートがあり、明細の小計や種別計、総合計を出力するのですが、このサブレポートのレコードソース(またはフィルタ)を設定するにはどうすれば良いのでしょうか?

 ・サブレポートのオープン時にMe.Recordsource="SELECT * FROM …"

だとエラーになり、オープン時には指定できないとのことでした。
親レポートとは親子関係もなく、使用するクエリーも別です。

VBAで設定するのは難しいのでしょうか?よろしくお願いします。

Aベストアンサー

>エラーになり、オープン時には指定できないとのことでした
>親レポートとは親子関係もなく・・
サブレポートの開く時のイベントに
Me.Recordsource="SELECT * FROM …"
は設定できます。
別の原因を探してください。
サブレポートのリンクフィールドに値が入っているのではないでしょうか。サブレポートのプロパティでリンクフィールドを確認してください。リンクフィールドに何か値が入っていれば削除すれば問題なく出力できると思います。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

Qメイン/サブレポートのコントロール表示について

環境:XP&ACCESS2003
サブレポートがメインレポートのほぼ中央に位置するレポートを作成しています。
サブレポートの下には、メインレポートのデータが数件表示されます。(連結コントロール)
サブレポートの元となるテーブルのデータがゼロ件の時があります。
(受注番号で連結)
サブレポートの元となるテーブルのデータがゼロ件の場合、メインレポートのサブレポート以下のデータがサブレポート分だけ上に表示される方法をご存知の方、教えてください。
よろしくお願いします。

Aベストアンサー

レポートの詳細でサブレポートの高さを最小にして配置しその下にメインレポートのコントロールを配置し詳細の高さもコントロールを含めた最初の高さに調整すればサブフォームに表示するデータがあればレコード分表示し無ければサブフォームは非表示の状態になると思うのですが・・。それではダメなのでしょうか。

別の方法
サブフォームを詳細に配置しメインレポートのデータを表示するコントロールをグループフッターを作りそこに配置する。メインレポートの詳細部分フォーマット時にサブレポートで使用しているテーブルをDCountでレコード数を求めて値が0の場合詳細部をFalseとして表示させない。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If DCount("*", "サブレポートで使用しているテーブル名") = 0 Then
Me.詳細.Visible = False
Else
Me.詳細.Visible = True
End If
End Sub

別の方法としてサブレポートで表示するデータがある時に出力するレポート1と無い場合にサブレポートを除いた同じ内容のレポート2を用意しておきサブレポートの元となるテーブルのレコードが0件の場合と0件でない場合で出力するレポートを変える方法。
フォームのレポートを出力するボタンのイベントに
Private Sub レポート出力ボタン_Click()
Dim stDocName As String
If DCount("*", "サブレポートで使用しているテーブル名") = 0 Then
stDocName = "レポート2"
DoCmd.OpenReport stDocName, acNormal
Else
stDocName = "レポート1"
DoCmd.OpenReport stDocName, acNormal
End If
End Sub
として出力するレポートを変える。
こんな感じでどうでしょうか。

レポートの詳細でサブレポートの高さを最小にして配置しその下にメインレポートのコントロールを配置し詳細の高さもコントロールを含めた最初の高さに調整すればサブフォームに表示するデータがあればレコード分表示し無ければサブフォームは非表示の状態になると思うのですが・・。それではダメなのでしょうか。

別の方法
サブフォームを詳細に配置しメインレポートのデータを表示するコントロールをグループフッターを作りそこに配置する。メインレポートの詳細部分フォーマット時にサブレポートで使用して...続きを読む

QACCESS サブレポートの参照について

ACCESS2003を使用しています。
メインレポートのページフッターにテキストボックスを配置して、サブレポートの小計を参照して表示しています。
しかしサブレポートにデータがない時があり、【#エラー】という表示になってしまいます。
そこで、サブレポートにデータがない時は、【0】という表示にしたいのですが、どういった方法があるか、教えてください。
よろしくお願いします。

Aベストアンサー

そのテキストボックスの横に新しいテキストボックスを置き

=IIf(Iserror(元のテキストボックス),0,元のテキストボックス)

元のテキスとボックスの[可視]は[いいえ]

QAccessでレポート内の繰り返しレコードの行数を固定したいです。

Accessでレポート内の繰り返しレコードの行数を固定したいです。

Access2007を使っています。

社内のフォーマットに合わせた物品購入申請書のようなものを
Accessのレポート機能を使って印刷したいと思っています。

大きく2つのテーブルから構成されます。

 (申請書テーブル)
  1文書に1レコードが該当するもの
  書類番号、申請日や申請者名、購入目的等が入ります。

 (購入物品テーブル)
  1文書に複数のレコードが該当するもの
  購入する物品の名前や金額等が入ります。
  書類番号を外部キーとして申請書テーブルとリンクします。


レポート機能で、この二つのテーブルを対象として、
(正確には、申請書テーブルはフォーム上で開いているレコードのみを対象と
 するために、クエリを仲介して)
購入物品は繰り返しにするようにすることで、ひととおり形にはなったのですが、
1つうまくいかないことがあります。

社内のもともとの手書き用フォーマットには、購入物品の記入枠が20行あります。
これは多めにつくってあるので、当然購入物品数が20以下の場合は、残りの行は
空白になっています。
しかし、Accessのレポートで作ったものは空白行がなく、おかげで購入物品件数
により「詳細」と「フッタ」の間の不自然な空白が広くなったりします。

フッタと言っても、内容的には、「上記物品の購入云々~、お願い致します。」
とかサインするエリアとかですので、繰り返しが終わったらすぐに開始をして
ほしいのです。

購入物品の数に関わらず全体の行数を20に固定する方法はありますでしょうか?

Accessでレポート内の繰り返しレコードの行数を固定したいです。

Access2007を使っています。

社内のフォーマットに合わせた物品購入申請書のようなものを
Accessのレポート機能を使って印刷したいと思っています。

大きく2つのテーブルから構成されます。

 (申請書テーブル)
  1文書に1レコードが該当するもの
  書類番号、申請日や申請者名、購入目的等が入ります。

 (購入物品テーブル)
  1文書に複数のレコードが該当するもの
  購入する物品の名前や金額等が入ります。
  書類番号...続きを読む

Aベストアンサー

レコードがない場合も用紙の最後まで罫線を出力する
http://hatenachips.blog34.fc2.com/blog-entry-17.html

レポートに関してはトップクラスの hatena さんのページです。

参考URL:http://hatenachips.blog34.fc2.com/blog-entry-17.html

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Q親フォームからサブフォームのレコードソースを設定

親フォームからサブフォームのレコードソースを設定するには?
フォーム1にテーブル1をドロップアンドドラッグして、「テーブル1のサブフォーム」を作成しました。

フォーム1にあるコマンドボタンから「テーブル1のサブフォーム」のRecordSourceを設定する方法を教えてください。

「テーブル1のサブフォーム」からなら
Private Sub Form_Load()
Me.RecordSource = ""
End Sub

とできるのですが、
やりたいことはフォーム1からのイベントなので
「テーブル1のサブフォーム」からのイベントは使えません。

だからってフォーム1の
Private Sub コマンド2_Click()
Me.テーブル1のサブフォーム.RecordSource = "テーブル1のサブフォーム"
End Sub

とするとコンパイルエラーになります。

良い方法があれば教えてください。アドバイスよろしくお願いします。

Aベストアンサー

No2です。説明もれがあったので追加しておきます。
No2のところで、

>このとき、「テーブル1のサブフォーム」
>のフィールドには「#Name?」のような表示がされていると
>思います。すなわちこときはサブフォームにはレコードソースが
>設定されていないからです。

としていますが、「#Name?」と表示される理由はフィールドの
コントロールソースが設定されているために、「#Name?」のような
表示が出てきます。


ここからは蛇足ではありますが、コントロールソースが設定されていなければ
こうした表示はでませんが、もしコントロールソースも取り除いて
いるならば、コマンド1でもコマンド2のクリックイベントでもどちらでも
かまいませんが、たとえば「テーブル1のサブフォーム」の
フィールドのコントロールソースをすべて取り除いておいて、
コマンド2のクリックイベントで設定するとすれば、一応
「テーブル1のサブフォーム」のフィールドの名前をID、名前、住所として
テーブル1のフィールド名を同じくID、名前、住所とするならば、

Private Sub コマンド2_Click()
Me.テーブル1のサブフォーム.Form.RecordSource = "テーブル1"
Me.テーブル1のサブフォーム.Form.Controls("ID").ControlSource = "ID"
Me.テーブル1のサブフォーム.Form.Controls("名前").ControlSource = "名前"
Me.テーブル1のサブフォーム.Form.Controls("住所").ControlSource = "住所"
End Sub

として、レコードソース、コントロールソースを設定します。

No2です。説明もれがあったので追加しておきます。
No2のところで、

>このとき、「テーブル1のサブフォーム」
>のフィールドには「#Name?」のような表示がされていると
>思います。すなわちこときはサブフォームにはレコードソースが
>設定されていないからです。

としていますが、「#Name?」と表示される理由はフィールドの
コントロールソースが設定されているために、「#Name?」のような
表示が出てきます。


ここからは蛇足ではありますが、コントロールソースが設定されていなければ
こうした表示はで...続きを読む

QAccessの桁区切りについて教えてください。

アクセスのレポートの金額に、桁区切りのカンマを付けたいと思っています。
プロパティの書式を通貨にすると¥マークがついてしまいます。
合計は付いてもいいのですが、内訳には¥マークを付かないように桁区切りだけにしたいのです。

そのため、書式に『###,##0』としました。
できましたが、小数点以下が表示されません。

小数点を表示したいので『###,##0.###』としたら、『59,180.000』となってしまいます。
小数点の指定を自動から3桁表示に変えましたが、うまくいきません。

教えていただきたい内容としては、
・金額の表示に桁区切りのカンマを付けたい。
・でも¥マークは付けたくない。
・小数点以下該当があるもののみ3桁まで表示させたいが(5,500.365)、
 小数点以下がないものは小数点以下は表示させたくない(5,400)。

ぜひともアクセスを使いこなしている方、お教えください。

Aベストアンサー

この内容からですと、[金額]フィールドを「レコードの内容により、書式を変えたい」と
いうことですので、テキストで処理する方法よりないかと思います。(Access2000)

VBAによる「ユーザー定義関数」を使う方法ですが、それで良かったら手順を
詳しく書きますので、テストしてみてください。

・テーブルのデザインで[金額]フィールドを「数値型」の「単精度浮動小数点型」か
 「倍精度浮動小数点型」にします。

・「モジュール」の新規作成で開いたコードウィンドウに下記コードをコピーして
 貼り付けます。

・フォームのレコードソースにするためのクエリを作成します。
 必要なフィールドをQBEグリッド(画面の下側)にドラッグした後、
 新規フィールドに 例えば、 金額Txt:Valtxt([金額]) と入力します。

・レポートの[金額]のコントロールソースに、この[金額T]を指定します。
 この書式で「配置」を右に設定します。

これで、少数部がない数値は、整数部だけを表示し、位取りの , が付きます。
小数部がある場合は、4位を四捨五入します。(通常と同じ)
その結果、右側に 0 が付いた場合は、表示しません。

ご承知の上とは思いますが、表形式の場合、少数点位置が揃わなくなりますので
見ずらくなってしまいます。

このようなもので如何でしょうか。

Function Valtxt(V As Double) As String
Dim T As String
Dim N As Integer
T = Format(V, "#,##0.000")
For N = Len(T) To InStr(T, ".") Step -1
  If Mid(T, N, 1) = "0" Then
    T = Left(T, N - 1)
  Else
    Exit For
  End If
Next N
If Right(T, 1) = "." Then T = Left(T, Len(T) - 1)
Valtxt = T
End Function

この内容からですと、[金額]フィールドを「レコードの内容により、書式を変えたい」と
いうことですので、テキストで処理する方法よりないかと思います。(Access2000)

VBAによる「ユーザー定義関数」を使う方法ですが、それで良かったら手順を
詳しく書きますので、テストしてみてください。

・テーブルのデザインで[金額]フィールドを「数値型」の「単精度浮動小数点型」か
 「倍精度浮動小数点型」にします。

・「モジュール」の新規作成で開いたコードウィンドウに下記コードをコピーして
 ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング