MS Access Tips/Sample and VBA and Blog customize etc...

目次(索引)ページを自動作成

商品一覧をレポートで印刷するのですが、レポートの最初のページに目次を表示させたいです。または、最後に索引ページを追加したいです。

レポート目次

レポートのフォーマット時イベントでワークテーブルに目次データを追加していって、それをレコードソースとする目次(索引)用レポートを作成するという方法が考えられます。あるいは、レポートヘッダー(レポートフッター)にテキストボックスを配置してそこに目次データを書き込むという方法も考えられます。

前者の方がデザインの自由度は高いですが、今回は、後者の方法を紹介します。工夫次第では後者の方法でもそれなりのデザインは可能ですが、とりあえず今回はシンプルな例です。

難易度:

最後に索引ページを挿入

レポートフッターにテキストボックス「txt索引」を作成します。レポートは「区分コード」でグループ化されてて、グループヘッダーとグループフッターは表示されてます。グループフッターの「改ページ」プロパティは「カレントセクションの後」、レポートの「ページヘッダー」プロパティは「レポート フッター以外」に設定。

レポート モジュール

Option Compare Database
Option Explicit
'区分コード ヘッダー フォーマット時
Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
    Me.txt索引 = Me.txt索引 & Left(区分名 & String(12, "・"), 12) Format(Me.Page, "@@@") & vbCrLf
End Sub

記述するコードは1行のみです。

txt索引の「フォント」は「MS 明朝」などの等幅フォントにします。「MS P明朝」などのPのついたプロポーショナルフォントだとページ部分が揃わなくなります。

最初のページに目次

レポートヘッダーにテキストボックス「txt目次」を配置。レポートの「ページヘッダー」プロパティは「レポート ヘッダー/フッター以外」、「ページフッター」プロパティは「レポート ヘッダー以外」。

また、レポート上のどこでもいいので、コントロールソースが =[Pages] のテキストボックスを配置しておきます。

レポートモジュール

Option Compare Database
Option Explicit

Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
    If Me.Pages = 0 Then
        Me.txt目次 = Me.txt目次 & Left(区分名 & String(12, "・"), 12) & Format(Me.Page, "@@@") & vbCrLf
    End If
End Sub

Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
    Me.Page = 0
End Sub

2010/11/23 追記

ぱずー さんからコメントがあった3段組目次のレポートをサンプルMDBに追加しました。

3段組目次レポート

レポートモジュール

サンプルMDB が下記からダウンロードできます。
RptIndexPage_07.zip (Access 2007 形式 - 40kb)
RptIndexPage.zip (Access 2002-2003 形式 - 43kb)
RptIndexPage_2k.zip (Access 2000 形式 - 42kb)

拍手する

6 Comments

ぱずー says..."段組にしたい"

目次の作り方、大変参考になりました

ところで、目次が縦長で3ページにもなってしまうのですが、
これを段組にして1ページに収める方法はないのもでしょうか
幅は4センチほどなので、3段組になればバッチリなのですが…

ページ設定ではダメみたいです

気長に待ってます

2010.11.22 17:43 | URL | #z3qy1u1E [edit]
hatena says..."Re: 段組にしたい"

ぱずーさん、はじめまして。

> ところで、目次が縦長で3ページにもなってしまうのですが、
> これを段組にして1ページに収める方法はないのもでしょうか
> 幅は4センチほどなので、3段組になればバッチリなのですが…

テキストボックスを3つ横に並べて、それぞれに割り当てるようにVBAを組めばいいでしょう。

まず、

txt目次1
txt目次2
txt目次3

とします。例えば、1段当たり20行として、、

Option Compare Database
Option Explicit
Const RowCount = 20
Dim Cnt As Integer

Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
 If Me.Pages = 0 Then
  If Cnt \ RowCount <= 2 Then
   Me("txt目次" & Cnt \ RowCount) = Me("txt目次" & Cnt \ RowCount) & Left(Me.区分名 & String(12, "・"), 12) & Format(Me.Page, "@@@") & vbCrLf
  End If
  Cnt = Cnt + 1
 End If
End Sub

Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
  Me.Page = 0
  Cnt = 0
End Sub

2010.11.23 07:32 | URL | #5uE6dEgY [edit]
ぱずー says..."すばらしー"

なにげなく、のぞいてみるとReが付いている・・・
うはぁー、段組のアドバイスじゃん!

さっそくやってみる・・・

バッチリです!すばらしすぎます!!
ありがとうございました!!!

ちなみに、こういいう発想ってどうやって湧くものなのでしょうか?
ほんと、うらやましいです!

なにか読んだらいいですよっみたいな本やサイトはありますか?

少し前に『プログラマの数学』という本を買ったのですが、
すぐに眠くなるんです・・・


2010.11.24 15:43 | URL | #z3qy1u1E [edit]
hatena says..."Re: すばらしー"

> ちなみに、こういいう発想ってどうやって湧くものなのでしょうか?
> ほんと、うらやましいです!

それは、ですね、、、、、、、
Accessを愛することです、、、、(いやっ、冗談ですけど、半分、本気?)

> なにか読んだらいいですよっみたいな本やサイトはありますか?

特定の本やサイトというのはちょっと思いつかないですね。
Access Clubなどの掲示板で、いろいろな人の回答をみることかな。

「プログラマの数学」面白そうですね。買ってみようかな。

2010.11.24 18:24 | URL | #5uE6dEgY [edit]
ekp says..."ぜひともご教授願います。"

はじめまして、VBAど素人の者です。

アクセスで医薬品の管理を行っており、医薬品の一覧表リストを作成するにあたり、索引や目次の作成に行き詰っております。

索引は医薬品名を五十音順に、目次は大分類で表示したいと考えておりますが、如何せん上記の索引ですらできません。

*************
Option Compare Database
Option Explicit
'区分コード ヘッダー フォーマット時
Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
Me.txt索引 = Me.txt索引 & Left(区分名 & String(12, "・"), 12) Format(Me.Page, "@@@") & vbCrLf
End Sub

記述するコードは1行のみです。
*************

まず索引作成に関して一つ教えてください。

私が作成したレポートには、「グループヘッダー0」に該当する箇所に「区分名」に該当するデータはなく、「詳細」箇所に索引を作りたい「薬品名」を反映しております。この「薬品名」の索引は、1頁2行にしても数ページにわたるのですが、どのように書き換えたらよろしいでしょうか?

2013.06.14 11:15 | URL | #- [edit]
hatena says...""

> 私が作成したレポートには、「グループヘッダー0」に該当する箇所に「区分名」に該当するデータはなく、「詳細」箇所に索引を作りたい「薬品名」を反映しております。この「薬品名」の索引は、1頁2行にしても数ページにわたるのですが、どのように書き換えたらよろしいでしょうか?

これだけでは、状況がよく把握出来ません。もう少し具体的に、テーブル名、フィールド名、データ例を出して説明してもらえますか。

このコメント欄では使いづらいので、下記の掲示板の方へ移動して質問してください。

hatena の Microsoft Access 掲示板
http://hatena-access.progoo.com/bbs/

2013.06.14 23:17 | URL | #5uE6dEgY [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/215-ef2409f1
該当の記事は見つかりませんでした。