MS Access

Accessのフォーム/レポートのコントロール同士をくっつけて桝目状にしたい

投稿日:2009年1月7日 更新日:

レポートを、Excelのような桝目の罫線にしたい。

お客からこんなニーズが多い。
やったことがある人ならわかるけど、これが、なかなか苦労する。

レポートのデザインビューで、いざ個々にコントロールをきちんと配置しようとすると、間があいたり重なったり、ピッタリ隣接して並ばない。キレイにならない。

これに10年近く悩まされている自分がここに・・・。

今日は差し迫った仕事がなかったので、時間をかけてじっくり追求してみた。
以下、追及した原因と、その対策。

フォームのグリッドについて(確認)
新規にレポートを作ると、「台紙」に、1センチ角で、方眼用紙みたいなグリッドが表示される。
そして表示はされないけど、ひとつの箱の中に10本のグリッド線が引かれている(X軸グリッド数とY軸グリッド数がともに10)。ということは、1グリッド=1ミリということになる。

原因1:自動で作成されるコントロールの大きさが中途半端
例えばテキストボックスコントロールを配置すると、幅:3cm、高さ:0.476cmで作成される。(ペアのラベルは、幅:1.587cm、高さ:0.476cm)
何でこんなに幅が中途半端なのか? 入るフォントが11ポイントなので、ぴったり入る大きさをデフォルトとしているから?

原因2:テキストボックスとそれに付随するラベルがペア
片方をドラッグして移動しようとすると、グループのもう片方がついてくる。便利なこともあるのだが、例えば二組のグループを表のように隣り合わせて配置しようとしたときに、ぴったり合わないで困る。
それぞれのコントロールの上下左右を引っ張ったり伸ばしたりして、グリッドに吸着させるが、4辺×4つのコントロールだから、16回それをしないといけない。
20個のコントロールを整えるとすると、4辺×20個で80回しないといけない。
大変面倒。

今までの対策
で、私の場合、レポートに散らばった大量のコントロールを表のように揃える時は、

  1. だいたいの位置に並べる。
  2. 複数のコントロールを選択し、「コントロールの配置」-「左」で揃える
  3. グリッド線がデフォルトは黒で、コントロールの色と同じなため、本当に揃っているのがわかりにくいので、全コントロールをプロパティで、境界線スタイルを実線にし、境界線色を赤にする。
  4. 印刷プレビューで線がずれていないのが確認できたら、3で付けた線のプロパティを元に戻す

・・・とやってきた。

でもこのやり方だと、2でテキストボックスはぴったり揃うのだが、それにヒモつけられたラベルもまとめて同じようにやろうとすると、左のつらで揃わない。ラベルの幅は、そこに入力される文字数によって大きさが勝手に広がってまちまちだから。
なので、さらに作業として、ペアとなるテキストボックスの幅や高さを調べて、それと同じにした上で、2の方法でそろえたり、プロパティに直接数値をタイプしたり。
それを複数選択したコントロールに施していく。
このやり方でやっと完成したとしても、その後、一部のコントロールの幅を広げたり縮めたりする必要が出てきたら、またひと苦労。修正もれも出やすい。うんざり。

今回発見した対策

  1. だいたいの位置に並べる。
  2. 全コントロールを選択し、「サイズ」-「グリッド線にあわせる」で大きさをグリッド線の基準に揃える(レポートの「グリッド線にあわせる」コマンドではなく、コントロールのサイズの「グリッド線にあわせる」コマンドであるのが紛らわしい)
  3. テキストボックスをドラッグして配置する。
  4. 必要に応じて、複数のコントロールを選択し、「コントロールの配置」-「左」で揃える

いやー、作業効率が大幅向上。
うれしい。

-MS Access

執筆者:

関連記事

no image

AccessのBeforeUpdateでUndo

BeforeUpdateプロシージャ内の処理で、Cancel = Trueとしたら更新がキャンセルされるところまではできたが、テキストボックスにNullを代入しようとしてエラーが出たりして、間違って入 …

no image

Accessであらかじめリンクテーブルを開いておくと劇的に高速化

リンクテーブルに対して「Dlookupで値を探して見つかったらCurrentDb.Execute UPDATE~ で値を更新」という処理をループで回している。 この処理、一旦始めると、終えるのに30分 …

no image

Office2013のSELFCERT.EXEの場所

さがして、やっと見つかった。 自分のPC環境の場合は、以下だった。 C:\Program Files (x86)\Microsoft Office\Office15 参考にしたブログによっては、C:\ …

no image

ExcelブックをAccessで読みたいときにリンクテーブルを使わない方法があったとは・・・知らなかった

とある業務で、Access内でExcelブックをリンクテーブルで読む・・・という使い方をしてきた。 (AccessのmdbはNASにおいて共有している。Excelのxlsも同じく) これはこれで便利な …

no image

DoCmd.GoToRecordよりもMe.SaveよりもMe.Refresh

Accessで、一旦フォーム上のレコードを保存したいとき、 Me.Save とやってもレコードが保存されない。 そこで、今までは、DoCmd.GoToRecordで無理矢理レコードを移動して保存してい …