こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Accessでレポートに任意のテーブルの任意の行を表示したい

レポート(非連結で作成)にあるテーブルの1フィールドを順番に1行ずつ表示させたいのですが、どのような方法があるでしょうか?
レポートは表形式ではなく、単票形式です。

Access2000です。

投稿日時 - 2004-07-27 08:59:22

QNo.940977

暇なときに回答ください

質問者が選んだベストアンサー

すいません、ページの外観に影響を及ぼすコマンドは、フォーマットイベントで行ってください。

Private Sub ページヘッダーセクション_Format(Cancel As Integer, PrintCount As Integer)

*********AccesのHelp Formatイベント抜粋です。***********

Format イベントが発生したときにマクロやイベント プロシージャを実行すると、カレント レコードのデータを使って、ページ レイアウトに影響する変更をレポートに加えることができます。たとえば、売上高のレポートで、営業部員の月ごとの売上高の合計の隣に、その売上高の合計が一定額に達したときにだけメッセージを表示することができます。コントロールの表示と非表示が切り替わると、"CanGrow/印刷時拡張"、"CanShrink/印刷時縮小"、"HideDuplicates/重複データ非表示"、"KeepTogether/同一ページ印刷"、および "Visible/可視" など、レイアウトに関連するプロパティの設定値に従ってセクションがフォーマットされます。

ページ レイアウトに影響しない変更の場合や、ページごとの合計を印刷するマクロのように、ページのデータがフォーマットされるまで実行されないマクロまたはイベント プロシージャの場合は、対象となるレポート セクションの Print イベントを使います。

投稿日時 - 2004-08-02 16:14:43

お礼

無事できました!!

ありがとうございます(><)

投稿日時 - 2004-08-02 17:23:09

ANo.7

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.6

へんですね~^^
こっちではうまくいってるんですけど、エラーの再現ができません。

デザイン時にラベルオブジェクトはどこにありますか?
(初期値)

また、ラベル名とテキストボックス名の識別に問題はないですか?

良ければ、前後のコードも記述してください。

投稿日時 - 2004-08-02 13:11:06

お礼

コードはとりあえずこんな感じです。

元データ(使用者)はページヘッダーにあります。
同じページヘッダーにある別ラベルを指定してみましたが、同じエラーになってしまいました。



Private Sub ページヘッダーセクション_Print(Cancel As Integer, PrintCount As Integer)

Me.ScaleMode = 1
Me.ForeColor = 0

'****************************
'* 新データ入力用画面の方 *
'****************************


使用者.Left = 3 * 567

'一番左の縦線
Me.Line (0.3 * 567, 0)-(0.3 * 567, 2430)
Me.Line (3 * 567, 0)-(3 * 567, 2430)
Me.Line (7 * 567, 0)-(7 * 567, 2430)

Me.Line (0.3 * 567, 0)-(7 * 567, 0)
Me.Line (0.3 * 567, 350)-(7 * 567, 350)
Me.Line (0.3 * 567, 700)-(7 * 567, 700)

'右・縦線
Me.Line (8 * 567, 0)-(8 * 567, 2430)
Me.Line (10.7 * 567, 0)-(10.7 * 567, 2430)
Me.Line (14.7 * 567, 0)-(14.7 * 567, 2430)

'横
Me.Line (8 * 567, 0)-(14.7 * 567, 0)
Me.Line (8 * 567, 350)-(14.7 * 567, 350)
Me.Line (8 * 567, 700)-(14.7 * 567, 700)

End Sub

投稿日時 - 2004-08-02 14:03:02

ANo.5

>レポート名.Label(使用者).Left = 5 * 5
>としてみましたが、エラーになりました。
>どのようにしたらいいのでしょうか?


まずどのようなエラーでしたか?

この記述からすると、

レポート名.使用者.left=5*5

通常 自レポートの扱いになるので

オブジェクト名.要素名 = ○○

使用者.left = ○○

でいけると思いますが、レポート名を指定しているのは、このコードを外部のモジュール(他のフォームなど)から実行押されていますか?
レポートのプロパティーが変更可能なのはフォーマット時や印刷時なのでプレビューが表示されてからの変更はできないと思います。

このコードを記述するならば詳細のフォーマット時・印刷時で記入してください。

投稿日時 - 2004-08-02 11:57:33

お礼

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

使用者.Left = 3 * 567
としてみましたが、エラーでした。
メッセージは

実行時エラー'2102':

プロパティの設定値として指定した値が不正です。

です。

>詳細のフォーマット時・印刷時で記入してください。

詳細ではなくページヘッダーに表示なのでページヘッダーの印刷時ではありますが、そちらへ記入しています。

投稿日時 - 2004-08-02 12:11:52

ANo.4

フィールド1から5も2列にするということでしょうか?

まあ、紙を大きいのに変えるか、フォントを小さくしてフィールドの幅を狭くするぐらいですかね^^;;

あと、任意の文字を表示させるには、

適当なラベルを作っておいて、表示、非表示を切り替えたり、表示位置を随時変更してやれば(Top、Left)そのような感じになります。

投稿日時 - 2004-08-02 09:07:35

お礼

回答ありがとうございます。
レポートのラベル位置をVBAでやるには

レポート名.Label(使用者).Left = 5 * 5

としてみましたが、エラーになりました。
どのようにしたらいいのでしょうか?

投稿日時 - 2004-08-02 09:30:06

ANo.3

#2です。#2の内容は忘れてください。題意とはずれてます。

#1の補足からですが、

フィールド6は同じレコードですか違うレコードですか?

違うレコードであれば、ファイルーページ設定ーレイアウトー行列設定で横の列数を決めてください。

フィールド1からフィールド5までをページヘッダーなどにおいて、フィールド6だけを詳細ページに於いてください。


同じレコードを配置するのであれば、フィールドを必要な数配置してください。これはデザインで必要な分貼り付けるか、VBAで随時作成するかです。

下記はレポートデザインを新規で作成してレポートにテキストボックスを作成しています。参考にしてください。

Sub makeTBox()

Dim TB(10) As Control

Dim tleft As Integer
Dim ttop As Integer
Dim theight As Integer
Dim twidth As Integer
Dim i As Integer

Dim crep As Report
Set crep = CreateReport


tleft = 100
ttop = 50
theight = 200
twidth = 1000

For i = 1 To 10

'ここで必要に応じて下記関数にフィールドの連結を入れてください。

Set TB(i) = CreateReportControl(crep.Name, acTextBox, , , , tleft, ttop + i * 500, twidth, theight)

TB(i).Name = "test_TextBox" & i

Next i



End Sub

投稿日時 - 2004-07-30 15:39:50

補足

VBAで任意の位置に線をひくのって

Me.Line(0.3*567,0)-(0.3*567,2430)
とかでできますよね?

これと同じように任意の位置に文字を表示させる場合ってどのようにすればいいのでしょうか?

投稿日時 - 2004-07-30 16:22:00

お礼

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

列わけられるんですね!!
知りませんでした!

ページヘッダにフィールド1~5までを…というのは私も考えてやってみました!
普通の状態だとできますが、2列とかにしてしまうとその分レポートの幅が狭くなって、全部入りません(><)

こんなわがまま解消できるでしょうか?

投稿日時 - 2004-07-30 16:15:39

ANo.2

任意のテーブルを後から連結する場合、
レポートのロード時点などで外部から連結するテーブルを割り当ててやる必要が出てくると思います。

1.外部のフォームなどのテキストボックス等に該当するテーブル名を入れておく。

2.ロードのタイミングで内部的に割り当ててやる。


このようにして、割り当てたテーブルの項目名がレポートで使われるデータ項目において各テーブル共通であればそれだけでいけると思いますが、
違う場合には、レポートの各項目のデータ項目名をテーブルに合わせて、その都度割り当てる必要があると思います。

レポートを作成する際に、どれか一つのテーブルをもとに作成されると作成しやすいと思います。作成後、題意のような表示になるを確認後、データとしてのテーブルの関連を削除してください。(この時点で非連結になると思います)

投稿日時 - 2004-07-27 11:42:44

お礼

回答ありがとうございます。
すいません、教えていただいた文章を読んだのですが、イマイチ理解できませでした。。。(=_=)
もう少し具体的に教えていただけると助かるのですが…
わがままいって申し訳ありません(><)
よろしくお願いします。

投稿日時 - 2004-07-30 08:54:44

ANo.1

下記のような問題でしょうか。違うような気もするのでその場合は補足を。
(例データ)テーブル:住所録
住所録ID郵便番号氏名会社役職2
1201-2123山田 太郎山田電気社長
2203-3211神田 次郎神田 商店常務
3100-1111名古屋株式会社名古屋商事常務
4311-2345佐野 三郎興和部長
5112-3210関西 商事関西商事課長
5件を作りました。
(操作)
レポート
デザインビュー
新規作成
(基になるテーブル)住所録
OK
レポート画面で「詳細」部に「住所録」の「フィールドリスト」が出ているから
項目を必要なだけドラッグアンドドロップして配置する。
「詳細」のベルトの上で右クリック。「プロパティ」を選ぶ。(セクション「詳細」のプロパティで)
「書式」の「改ページ」を「カレントセクションの後」を選ぶ。(その行でクリックすると▼がでて、クリックして
選ぶ)。
印刷してみると、テーブル1行分が、配置したレイアウトで1枚づつ、計5枚印刷しました。

投稿日時 - 2004-07-27 10:05:03

お礼

回答ありがとうございます。
すいません、ちょっと説明が足りなかったようですね。
レポートはこんな感じです。

 フィールド1*
 フィールド2*
 フィールド3*
 フィールド4*
 フィールド5*

 フィールド6
 フィールド6
 フィールド6
 フィールド6
 フィールド6
 フィールド6
 フィールド6
   :

というような感じです。
フィールド1-5は非連結データで、テーブルなどのデータはまったく関係ありません。
フィールド6のみをテーブルの1つのフィールドをもってきて、連続で出したいのです。
しかもできれば
  フィールド6  フィールド6
  フィールド6  フィールド6
  フィールド6  フィールド6
  フィールド6  フィールド6
  フィールド6  フィールド6
  フィールド6

みたいな感じで任意の形にできるとさらにうれしいです。
コードを組んだらできるかな?と思ったんですが、無理でした。。。

投稿日時 - 2004-07-30 08:53:01

あなたにオススメの質問