Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルアクセスのレポートについて
記事No16668
投稿日: 2011/05/11(Wed) 22:18
投稿者らっくす
解決済: ON
OS:xp
Access Version: 2003

ACCESSのレポートについて至急教えてください

テーブル A
レコードが2行あるとします。

フィールド名 商品名 住所
       ああああ 東京
いいいい 北海道

レポート B

レポートの詳細に@TXT_商品名1ATXT_商品名2BTXT_住所1CTXT_住所2という名前のテキストボックスがあります。

レポートはAテーブルとは連結させず、レポートの中でDAOを用いてレコードセットを発行しています。

TXT_商品名1="ああああ"
TXT_商品名2="いいいい"
TXT_住所1="東京"
TXT_住所2="北海道"

1ページには2レコード分を印字し、改行する方法がわかりません。
2ページ目には3レコード〜4レコード目が印字されます。
どなたか助けてください。どのサイトを探しても有効な手立てがみつかりません。

ご教示願います。

タイトルRe: アクセスのレポートについて
記事No16669
投稿日: 2011/05/11(Wed) 22:52
投稿者hatena
解決済: ON
> レポートはAテーブルとは連結させず、レポートの中でDAOを用いてレコードセットを発行しています。

非連結レポートですか。
下記のコードを見て意味が理解できたら、その応用でできるでしょう。

非連結レポートの実験
http://hatenachips.blog34.fc2.com/blog-entry-76.html



なぜ、連結の方がはるかに簡単なのに、なぜ、非連結でやりたいのでしょうか。
その理由をお聞かせください。


連結でやる方法は、
ページ設定 - レイアウト の 列数 に 2 と設定するだけです。

タイトルRe^2: アクセスのレポートについて
記事No16670
投稿日: 2011/05/12(Thu) 13:48
投稿者らっくす
解決済: ON
補足です。

レポートのレイアウトはこんな感じです。


-------------------------------------------------------------
|
TXT_商品名1 | TXT_商品名2
TXT_住所1 | TXT_住所2
|
|
|
-------------------------------------------------------------

連結でレポートを表示させると
1ページ目
-------------------------------------------------------------
|
あああああ | あああああ
東京 | 東京
|
|
|
-------------------------------------------------------------

となってしまいます。

やりたいのは
1ページ目
-------------------------------------------------------------
|
あああああ | いいいいい
東京 | 北海道
|
|
|
-------------------------------------------------------------

のようにテーブルの1レコード目は左の伝票に印刷。
2レコード目は右側の伝票に印刷です。
3レコード目は当然左側の伝票に印刷です。

タイトルRe^3: アクセスのレポートについて
記事No16671
投稿日: 2011/05/12(Thu) 14:30
投稿者hatena
解決済: ON
> -------------------------------------------------------------
>                               |
>  TXT_商品名1                  |   TXT_商品名2 
>  TXT_住所1                    |   TXT_住所2
>                               |
>                               |
>                               |
> -------------------------------------------------------------

デザインビューでは1列分のみ、テキストボックス等を配置します。
レポートの幅も1列分(用紙の半分)にします。

-------------------------------
                              |
 TXT_商品名1                  | 
 TXT_住所1                    |
                              |
                              |
                              |
-------------------------------

で、[ファイル]-[ページ設定]-[レイアウト]で「列数」を 2 に設定します。

これで、下記のやりたい出力になります。

> やりたいのは
> 1ページ目
> -------------------------------------------------------------
>                               |
>  あああああ                   | いいいいい
>  東京                         | 北海道
>                               |
>                               |
>                               |
> -------------------------------------------------------------
> 
> のようにテーブルの1レコード目は左の伝票に印刷。
> 2レコード目は右側の伝票に印刷です。
> 3レコード目は当然左側の伝票に印刷です。

タイトルRe^4: アクセスのレポートについて
記事No16672
投稿日: 2011/05/12(Thu) 15:15
投稿者らっくす
解決済: ON
ご指示通り、プリンターのレイアウトを2列目にしてみましたが
右ではなく下の伝票に印字されてしまいました。
プリンターの用紙サイズを伝票に合わせたサイズ(ユーザー定義)にしているのが
駄目なのでしょうか。
レポートのデザインでは2レコード作製することは不可能なのでしょうか。。。。

タイトルRe^5: アクセスのレポートについて
記事No16673
投稿日: 2011/05/12(Thu) 15:31
投稿者hatena
解決済: ON
> ご指示通り、プリンターのレイアウトを2列目にしてみましたが
> 右ではなく下の伝票に印字されてしまいました。
> プリンターの用紙サイズを伝票に合わせたサイズ(ユーザー定義)にしているのが
> 駄目なのでしょうか。
> レポートのデザインでは2レコード作製することは不可能なのでしょうか。。。。

デザインで1列でも、列数を 2に設定すれば2列になります。
レポートの幅が、(用紙の幅−左余白−右余白)÷2 以下になってますか。

タイトルRe^6: アクセスのレポートについて
記事No16674
投稿日: 2011/05/12(Thu) 16:12
投稿者らっくす
解決済: ON
> レポートの幅が、(用紙の幅−左余白−右余白)÷2 以下になってますか。

26cm-0.5(左余白)-0.4(右余白)÷2=約12.5
レポートの幅が約10cmなので問題ないはずなのですが・・・。
ドットプリンタだから無理なのでしょうか。。。

レポートのレイアウトを2列分作成すると印字はうまく行きます。
ただ、2列目の印字が1列目と同じデータが入ってしまい
2レコードのテーブルデータの場合、2ページ印刷されてしまいます。。

タイトルRe^7: アクセスのレポートについて
記事No16675
投稿日: 2011/05/12(Thu) 16:23
投稿者hatena
解決済: ON
> 26cm-0.5(左余白)-0.4(右余白)÷2=約12.5
> レポートの幅が約10cmなので問題ないはずなのですが・・・。
> ドットプリンタだから無理なのでしょうか。。。

ドットプリンタとかは関係ないように思います。
プレビューでも1列しか表示されてませんか。

それでは、
[ページ設定]-[レイアウト] の [幅]も 10cm に設定してみてください。

下記のページの3番目の画像を参考にしてください。

http://hatenachips.blog34.fc2.com/blog-entry-199.html

ただし、「印刷方向」は「上から下へ」を選択してください。

タイトルRe^8: アクセスのレポートについて
記事No16676
投稿日: 2011/05/12(Thu) 16:50
投稿者らっくす
解決済: ON
ようやくレポートの1ページ目が左に2ページ目が右に印字されるようになりました。

現在の設定としては

ページレイアウト 幅 10CM
印刷方向 上から下

レポート→右クリック→印刷→プロパティ→ページ形式 シートごとのページ数 1→2

にすることで意図する動作をするようになりました。

しかし、レポートの2ページ目(印刷では右側)に印字された文字があきらかに小さくなっています。
何が原因でしょうか。

タイトルRe^9: アクセスのレポートについて
記事No16677
投稿日: 2011/05/12(Thu) 17:20
投稿者らっくす
解決済: ON
2ページ目が左に印刷されたり、下に印刷されたりします。。。
何が違うのかわからなくなってきました。。。
1レポートに左と右を分けて印字することはできないのでしょうか。

タイトルRe^10: アクセスのレポートについて
記事No16679
投稿日: 2011/05/12(Thu) 18:37
投稿者MAR
解決済: ON
変動するようなずれ方
印刷時拡張しているとか?

タイトルRe^10: アクセスのレポートについて
記事No16680
投稿日: 2011/05/12(Thu) 19:56
投稿者hatena
解決済: ON
> 2ページ目が左に印刷されたり、下に印刷されたりします。。。
> 何が違うのかわからなくなってきました。。。

何か特別な設定などをしないとそのようにはならないです。
MARさんが指摘している「印刷時拡張」ぐらいしか思いつかないですね。

まずは、シンプルなレポートを新規作成して、
2列表示ができるよう挑戦してみてください。

それができたら、そこから、現在のレポートと同じなるように
設定やレイアウトを変更していきます。

> 1レポートに左と右を分けて印字することはできないのでしょうか。

今、紹介しているのが、左右2列で表示する一番簡単な方法です。

あとは、VBAを使う方法があります。
下記のページのVBAが理解できるのなら、その応用でできます。

http://hatenachips.blog34.fc2.com/blog-entry-105.html

タイトルRe^11: アクセスのレポートについて
記事No16681
投稿日: 2011/05/12(Thu) 22:16
投稿者らっくす
解決済: ON
ありがとうございます。

紹介いただいたホームページの「レコードを横に展開する」のプログラムを
参考にしながら明日、再度チャレンジしてみます。
hatenaさん・MARさんありがとうございます。
また、明日、状況をご報告しますね。

> http://hatenachips.blog34.fc2.com/blog-entry-105.html

タイトルRe^12: アクセスのレポートについて
記事No16682
投稿日: 2011/05/13(Fri) 00:31
投稿者hatena
解決済: ON
> 紹介いただいたホームページの「レコードを横に展開する」のプログラムを
> 参考にしながら明日、再度チャレンジしてみます。
> hatenaさん・MARさんありがとうございます。
> また、明日、状況をご報告しますね。
>  
> > http://hatenachips.blog34.fc2.com/blog-entry-105.html

列数 2 の設定で出来るはずなのに、できないとは、
かなり特殊な状況です。
VBAを使う方法でも、うまくいかない可能性大ですね。

実物をみてみないと、こちらからは原因は特定が難しいので、
差し支えなければ、上記で紹介した私のブログのメールフォーム
から添付ファイルにして送ってもらえますか。

レポートと関連テーブルだけにして、データも数件だけ、個人情報の
部分はマスキングして、圧縮ファイル(ZIP または LZH)にして、添付してください。

タイトルRe^13: アクセスのレポートについて
記事No16683
投稿日: 2011/05/13(Fri) 09:52
投稿者らっくす
解決済: ON
hatenaさんご連絡ありがとうございます。

昨日、教えていただいたホームページよりとりあえずVBAを使って構築しています。

レポートレイアウト
----------------------------------------------------------

商品名1 住所1



----------------------------------------------------------
このようなレポートで左に1レコード目 右に2レコード目を1ページに
印刷します。

この場合の処理として疑問点が出たので教えてください。

Dim clCtl(1 To 2) As New Collection

Private Sub Report_Open(Cancel As Integer)

Set clCtl(1) = Me.Txt_商品名1
Set clCtl(2) = Me.Txt_住所1

End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

ここの記述方法がわかりません。
  1)配置したテキストボックスの左位置を個別に指定する方法
→配置するテキストテキストボックスの左位置はそれぞれ異なる為。

  2)列を2つに指定する方法

Me.MoveLayout = False

End Sub

お手数ですが、ご教示願います。

タイトルRe^14: アクセスのレポートについて
記事No16684
投稿日: 2011/05/13(Fri) 10:17
投稿者hatena
解決済: ON
> 昨日、教えていただいたホームページよりとりあえずVBAを使って構築しています。
> 
> レポートレイアウト
> ----------------------------------------------------------
> 
> 商品名1     住所1
> 
> 
> 
> ----------------------------------------------------------
> このようなレポートで左に1レコード目 右に2レコード目を1ページに
> 印刷します。
> 
> この場合の処理として疑問点が出たので教えてください。

レポートヘッダーにテキストボックスを配置して、下記のように設定します。
コントロールソース =Count(*)
名前 Cnt

レポートヘッダーの可視は「いいえ」にします。

Const Cols = 2 '列数
Const ColWidth = 10 * 567 '列幅 10cm

Dim clCtl(1 To 2) As New Collection

Private Sub Report_Open(Cancel As Integer)
    Dim ctl As Control

    Set clCtl(1) = Me.Txt_商品名1
    Set clCtl(2) = Me.Txt_住所1
    
    For Each Ctl In clCtl
        Ctl.Tag = Ctl.Left  'Tagプロパティに左位置を格納しておく。
    Next
End Sub


Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
    Dim Col As Byte

    Col = (Me.CurrentRecord - 1) Mod Cols
    For Each Ctl In clCtl
        Ctl.Left = Val(Ctl.Tag) + ColWidth * Col
    Next
    Me.MoveLayout = (Col = Cols - 1 Or Me.Cnt = Me..CurrentRecord)
End Sub

投稿欄で直書きで、実際にサンプルで動作確認はしていないので、
なにか見落としがあるかも知れませんが、
左位置はTagに格納しておいて、それを利用するという考え方でいけると思います。

タイトルRe^15: アクセスのレポートについて
記事No16686
投稿日: 2011/05/13(Fri) 10:44
投稿者らっくす
解決済: ON
>
> For Each Ctl In clCtl
> Ctl.Tag = Ctl.Left 'Tagプロパティに左位置を格納しておく。
> Next

→ctlのところで配列にはバリアント型を指定してくださいとエラーが出てしまいました。。


  →いただいた詳細フォーマットの記述で2つのテキストボックスの左位置をそれぞれ別の
   値に指定できるのでしょうか。

タイトルRe^16: アクセスのレポートについて
記事No16687
投稿日: 2011/05/13(Fri) 11:23
投稿者らっくす
解決済: ON
修正してみました。

Dim clCtl As New Collection
Dim ctl As Control
Const Cols = 2 '列数
Const ColWidth = 2 * 567 '列幅 10cm

Private Sub Report_Open(Cancel As Integer)

With clCtl
.Add Me.Txt_商品名1
End With

For Each ctl In clCtl
ctl.Tag = ctl.Left 'Tagプロパティに左位置を格納しておく。
Next

End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

Dim Col As Byte

Col = (Me.CurrentRecord - 1) Mod Cols

For Each ctl In clCtl
ctl.Left = Val(ctl.Tag) + ColWidth * Col
Next

Me.MoveLayout = (Col = Cols - 1 Or Me.cnt = Me.CurrentRecord)

end sub

エラーもなく動くようになりましたが
1レコード目が1ページ。2レコード目が2ページに左位置をずらした形で
表示されてしまいました。あともう一歩のところまで来ているようです。
ご教示願います。

タイトルRe^17: アクセスのレポートについて
記事No16688
投稿日: 2011/05/13(Fri) 11:57
投稿者らっくす
解決済: ON
一度、レポートを削除し、再度作り直し、以下のようにコードを書きこみました。
レポートのサイズはA4でやっています。

Dim clCtl As New Collection
Dim ctl As Control
Const Cols = 2 '列数
Const ColWidth = 5 * 567 '列幅 10cm

Private Sub Report_Open(Cancel As Integer)

With clCtl
.Add Me.Txt_商品名1
End With


For Each ctl In clCtl
ctl.Tag = ctl.Left 'Tagプロパティに左位置を格納しておく。
Next

End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

Dim Col As Byte

Col = (Me.CurrentRecord - 1) Mod Cols

For Each ctl In clCtl
ctl.Left = Val(ctl.Tag) + ColWidth * Col
Next

Me.MoveLayout = (Col = Cols - 1 Or Me.cnt = Me.CurrentRecord)

テーブルには5レコードあり、レポートのプレビューを見ると
1ページに5レコード印字されてしまいました。
2レコードで改ページする方法を教えてください。

タイトルRe^18: アクセスのレポートについて
記事No16690
投稿日: 2011/05/13(Fri) 22:26
投稿者らっくす
解決済: ON
何度も乱筆失礼いたします。
下記のコードを記述し、ようやくおもい通りの動作をするように
なりました。横の印字位置もうまくいっています。
ただ、2ページを印刷すると、2ページ目がずれてしまいます。
1ページ目の最後に2ページ目が印字されているイメージです。

特に改ページの設定はしていないのですが、レポートのプレビューでは
改ページされているように見えます。
しかし、印字すると2ページ目から印字がずれます。
改ページはどのようにすれば良いのでしょうか。
どなたかお助けください。


Dim clCtl As New Collection
Dim ctl As Control
Const Cols = 2 '列数
Const ColWidth = 13.7 * 567 '1cm=567 twip

Private Sub Report_Open(Cancel As Integer)

'コントロールをコレクションに追加する。
With clCtl
.Add Me.Txt_商品名1
.Add Me.住所
End With

For Each ctl In clCtl
ctl.Tag = ctl.Left 'Tagプロパティに左位置を格納しておく。
Next

End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

Dim Col As Byte

Col = (Me.CurrentRecord - 1) Mod Cols

For Each ctl In clCtl
ctl.Left = Val(ctl.Tag) + ColWidth * Col
Next

Me.MoveLayout = (Col = Cols - 1 Or Me.cnt = Me.CurrentRecord)

End Sub

タイトルRe^19: アクセスのレポートについて
記事No16693
投稿日: 2011/05/15(Sun) 00:34
投稿者hatena
解決済: ON
Option Compare Database
Option Explicit
Dim clCtl As New Collection
Dim ctl As Control
Const Cols = 2 '列数
Const ColWidth = 8.5 * 567 '1cm=567 twip

Private Sub Report_Open(Cancel As Integer)

    'コントロールをコレクションに追加する。
    With clCtl
        .Add Me.F1
        .Add Me.F2
    End With

    For Each ctl In clCtl
        ctl.Tag = ctl.Left 'Tagプロパティに左位置を格納しておく。
    Next

End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
Dim Col As Byte

    Col = (Me.CurrentRecord - 1) Mod Cols
    Debug.Print Me.CurrentRecord, Col
    For Each ctl In clCtl
        ctl.Left = Val(ctl.Tag) + ColWidth * Col
    Next
    
    Me.MoveLayout = (Col = Cols - 1 Or Me.Cnt = Me.CurrentRecord)
    If Col = 1 And Not Me.Cnt = Me.CurrentRecord Then
        Me.詳細.ForceNewPage = 2
    Else
        Me.詳細.ForceNewPage = 0
    End If

End Sub

でどうですか。

でも、このコードの意味を理解できてますか。
自分でメンテナンスできますか。


ページ設定−レイアウト の列数設定の方が絶対簡単です。
どこか設定をまちがっているだけだと思います。
詳細セクションの「改ページ」プロパティは「しない」になってますか。
改ページコントロールを配置しているとかしてないですか。

タイトルRe^20: アクセスのレポートについて
記事No16694
投稿日: 2011/05/15(Sun) 09:30
投稿者らっくす
解決済: ON
ご連絡ありがとうございます。
一度、試に作ってみます。

記述していただいた内容でわからないところがあるので
教えてください。

Me.CurrentRecordはどういう意味なのでしょうか。
Me.MoveLayoutについてもよくわかりません。
その他はなんとか理解できます。
重ね重ねすいませんがお願いします。

ForceNewPageについては理解できました。
こうやって改ページのコントロールを操作するのですね。

タイトルRe^21: アクセスのレポートについて
記事No16695
投稿日: 2011/05/15(Sun) 22:44
投稿者hatena
解決済: ON
> Me.CurrentRecordはどういう意味なのでしょうか。
> Me.MoveLayoutについてもよくわかりません。
> その他はなんとか理解できます。

ヘルプに詳しく説明があると思いますよ。

タイトルRe^22: アクセスのレポートについて
記事No16696
投稿日: 2011/05/16(Mon) 17:12
投稿者らっくす
解決済: ON
やはり、どうしても2ページ目の縦が
1ページの最後の方に出てしまいますね。。。

レポートの幅は25cm

ページ設定の余白上下 6cm 右左5cm
プリンタのサーバープロパティ 幅 26.45cm 高さ 6.35cm

センチではなくてインチにするべきなのでしょうか。 

一体何が原因なのか。。。

Option Compare Database
Option Explicit
Dim clCtl As New Collection
Dim ctl As Control
Const Cols = 2 '列数
Const ColWidth = 13.7 * 567 '1cm=567 twip

Private Sub Report_Open(Cancel As Integer)

'コントロールをコレクションに追加する。
With clCtl
.Add Me.F1
.Add Me.F2
End With

For Each ctl In clCtl
ctl.Tag = ctl.Left 'Tagプロパティに左位置を格納しておく。
Next

End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
Dim Col As Byte

Col = (Me.CurrentRecord - 1) Mod Cols
Debug.Print Me.CurrentRecord, Col
For Each ctl In clCtl
ctl.Left = Val(ctl.Tag) + ColWidth * Col
Next

Me.MoveLayout = (Col = Cols - 1 Or Me.Cnt = Me.CurrentRecord)
If Col = 1 And Not Me.Cnt = Me.CurrentRecord Then
Me.詳細.ForceNewPage = 2
Else
Me.詳細.ForceNewPage = 0
End If

End Sub

タイトルRe^23: アクセスのレポートについて
記事No16697
投稿日: 2011/05/16(Mon) 17:50
投稿者hatena
解決済: ON
当方で作成したサンプルではうまくいってます。

レポートはちょっとした設定の違いで、結果が異なってきます。

これ以上は実物をみないと、アドバイスは難しいですね。

差し支えなければ実物のファイルを、私のブログのメールフォームから添付ファイルで
送ってもらえませんか。

個人情報はマスキングして、症状の再現できる最低限のデータとオブジェクトだけにして
圧縮ファイルにして送ってください。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る