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

AutoFontSize関数を垂直文字配置の指定ができるよう改良

AutoFontSize関数を利用して、レポート内テキストボックスのデータを縮小することはできたのですが、縮小すると、文字の配置が上側になってしまうのを、どうにか真ん中に表示させたいのです。エクセルには、セルの書式設定で、「縦位置」「中央揃え」というのがありますが、アクセスでどうにかならないものでしょうか?

テキストボックス内の文字を自動で縮小して全体を表示でAutoFontSize関数を紹介しました。それに関して、上記のような要望がありました。そこで、引数で、文字の垂直配置(上, 中央, 下)を指定できるように改良しました。

AutoFontSize関数垂直文字配置

難易度:

標準モジュールに下記のコードをコピーして貼り付けてください。

下記は宣言部(モジュールの冒頭部分 Option Compare Database/Option Explicit の後)に貼り付けてください。

下記は本体部(プロシージャを記述する部分)に貼り付けてください。

追記 2013.07.19: バグがあったのでコードを修正しました。

誤)    arStr = Split(Str, vbCrLf, vbTextCompare)
正)    arStr = Split(Str, vbCrLf, -1, vbBinaryCompare)

レポートのテキストボックスの配置してあるセクションのフォーマット時イベントで、下記のように記述します。

第3引数で、垂直文字配置を指定します。設定値は下記の通りです。

定数説明
Top0上揃えに配置されます。
Center1中央揃えに配置されます。
Bottom2下揃えに配置されます。

この引数は省略することも可です。省略した場合は、Top(上揃えになります。)

他の引数については、テキストボックス内の文字を自動で縮小して全体を表示 を参照ください。

拍手する

19 Comments

楓 says..."Access 2010でエラーが出る"

初めまして、楓と申します。

AutoFontSizeをAccess 2010で使用しようとしたのですが、

.FontName = Ctr.FontName
↑rptに対して上記コードを実行時にエラーが出ます。

エラー番号:2455
エラー内容:指定した式に、Fontnameプロパティに対する正しくない参照が含まれます。

Accessのバージョン違いによるものでしょうか?
時間がある時にでも、回答をお願いします。

2011.03.18 15:37 | URL | #.JNwu0jM [edit]
hatena says..."Re: Access 2010でエラーが出る"

当方の Access 2010 (OSはWin7 32bit)では問題なく使用できてますので、バージョン依存の問題ではないと思います。

新規MDBでなるべくシンプルなレポートを作製しても同様のエラーはでるでしょうか。

2011.03.18 18:36 | URL | #5uE6dEgY [edit]
楓 says..."Re: Access 2010でエラーが出る"

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

hatenaさんが仰る通り、新規MDBで試すとうまくいったので、
なぜだろうと少し悩みましたが、関数をコールする場所が
まずかったようです。

Report_Load時にページヘッダにあるラベルに、
テーブルより取得した名称をセットしたすぐあとに、
AutoFontSizeをコールしていたので、エラーが出たようです。

コントロールを配置しているセクションのフォーマット
イベントでコールすれば良かったんですね。
今回の場合は、ページヘッダのフォーマットイベントで
コールすれば正常に使用できました。

すみません、当方が使用方法を見落としていたようです。

ありがとうございました。

2011.03.18 20:22 | URL | #.JNwu0jM [edit]
MAIMAI says..."テキストボックス名"

はじめまして、MAIMAIと申します。

レポート製作に使用させていただきました!
一応はうまくできたのですが、すべてのテキストボックスを中央揃えにするにはどうしたらいいのでしょうか…?

2012.01.19 14:17 | URL | #Wn.2/1uk [edit]
hatena says..."re: テキストボックス名"

レポートのデザインビューで、すべてのテキストボックスを選択して、プロパティの文字配置を「中央」にすればいいかと思います。

2012.01.19 15:48 | URL | #5uE6dEgY [edit]
MAIMAI says...""

すみません、横ではなく縦です…;

AutoFontSize Me.テキストボックス名, 12, Center
をいくつも書くしかないのでしょうか…?

2012.01.20 10:40 | URL | #yl2HcnkM [edit]
hatena says..."全てのテキストボックスに設定"

詳細セクションの全てのテキストボックスに適用する場合のコード例です。

Private Sub Report_Open(Cancel As Integer)
  Dim ctl As Control
  
  For Each ctl In Me.Controls
    If ctl.ControlType = acTextBox Then
      ctl.Tag = ctl.FontSize 'フォントサイズをTagに格納しておく
    End If
  Next

End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  Dim ctl As Control
  
  For Each ctl In Me.Controls
    If ctl.Section = 0 And ctl.ControlType = acTextBox Then
      AutoFontSize ctl, ctl.Tag, Center
    End If
  Next
End Sub

2012.01.21 02:38 | URL | #5uE6dEgY [edit]
MAIMAI says...""

>Private Sub Report_Open(Cancel As Integer)
は何処に記述したらいいのでしょうか?
また、
>ctl.Tag = ctl.FontSize 'フォントサイズをTagに格納しておく

というのはどうやるのでしょうか…?

2012.01.23 12:25 | URL | #yl2HcnkM [edit]
hatena says...""

Private Sub Report_Open(Cancel As Integer)

は、フォームの「開くとき」のイベントプロシージャです。


ctl.Tag = ctl.FontSize 'フォントサイズをTagに格納しておく

の'以降は、コメントといって、コードの意味の説明文として使用します。

コードを見ただけでは目的が分かりづらいときに、後から見たときや、他の人に理解しやすくするために記述しています

2012.01.23 13:31 | URL | #5uE6dEgY [edit]
MAIMAI says...""

ありがとうございます!
おかげさまで無事にできました!

2012.01.23 15:41 | URL | #yl2HcnkM [edit]
奥村 says..."垂直中央表示だけverのお願い"

お世話になります。

レポートの作成で行き詰まりこちらに辿り着きました。
そこで早速導入してみたところきれいに表示されました。
ありがとうございます。

そこでお願いなのですが自動縮小機能を除いた垂直中央表示にする処理verを教えてもらえませんでしょうか。

更にヘッダ・フッタ含めたレポート全体に適応できると助かります。

参考にさせて頂き、更にお願いで大変恐縮ですが、何卒よろしくお願い致します。

2014.12.25 01:08 | URL | #1ysID9Ow [edit]
hatena says..."re:垂直中央表示だけverのお願い"

このページで紹介しているのは、あくまで一つのテキストボックス内で、中央に表示するものです。

「ヘッダ・フッタ含めたレポート全体に適応」とのことですが、
具体的にどのようなレポートなのでしょうか。


1ページだけのか、複数ページのものなのか、
1ページ1レコードなのか、複数レコードなのか、
グループ化されていて、グループヘッダー、グループフッターが表示されているものなのか、

・・・・・

など、いろいろなレポートが考えられますが、それぞれによって対処法は変わってきます。

どちらにしも、このページの関数から自動縮小機能を取り除けばいいというような単純なものではないです。

2014.12.25 14:59 | URL | #5uE6dEgY [edit]
奥村 says..."re:re:垂直中央表示だけverのお願い"

返信ありがとうございます。

作成しているレポートは見積書です。
・ヘッダー(発行№、相手名、住所、自社名など)
・詳 細 (品名、単価、数量、単位、金額)
・フッター(小計、消費税、合計)
詳細が一定行を超えれば改ページするものを作成中です。

そのレイアウトデザインで垂直中央表示機能が必要となりました。

上記の「詳細セクションの全てのテキストボックスに適用する場合」を利用し詳細部においては一括で垂直中央表示になりました。

同様にヘッダやフッタにも適用できませんでしょうか。

宜しくお願い致します。

2014.12.25 17:50 | URL | #- [edit]
hatena says..."re:垂直中央表示だけverのお願い"

それぞれのテキストボックス内で文字が中央に配置できればいいのでしょうか。

それとも、全体のレイアウトを中央に配置したいのでしょうか。
例えば、詳細が1行でも5行でも全体が中央にくるようにしたいのでしょうか。


----------


ヘッダー
詳細
フッター


----------

----------
ヘッダー
詳細
詳細
詳細
詳細
詳細
フッター
----------

2014.12.26 02:04 | URL | #5uE6dEgY [edit]
ケコミミ says..."エラー回避"

はじめまして、いつも参考にさせて頂いております。
Str = Ctr.Text 'ここでエラーが出る場合は、Str = Nz(Ctr.Value,"")
上記の場所ですが、CtrがNULLの場合、Str = Nz(Ctr.Value,"")に書き換えてもエラーが発生します。
なので、一行上に
If IsNull(Ctr) Then Exit Sub
を挿入したらエラーが回避されましたので御報告までに

2015.09.10 14:55 | URL | #- [edit]
hatena says..."re:エラー回避"

当方のサンプルで実験してみましたが、Ctl.Value がNullでもエラーにはなりませんでした。
コードを見ても、NzでNull を""に変換した後、
If Str = "" Then Exit Sub
で抜けてますので、Nullでエラーが出るとは思えないです。

エラーメッセージはなんでしたか。
また、デバックを押下した時に反転表示されるコードはどこでしたか。

2015.09.11 17:01 | URL | #5uE6dEgY [edit]
ケコミミ says...""

お世話になります
何年もこのAutoFontSize関数にお世話になっていますが、
どうも、クエリの元のデータ自体がnullでデータが一件も無い場合にエラーが出るような気がします(今自宅で再現できなくてすいません)
エラーメッセージは明日以降に調べます

2015.09.11 20:27 | URL | #- [edit]
ケコミミ says...""

>コードを見ても、NzでNull を""に変換した後、
>If Str = "" Then Exit Sub
>で抜けてますので、Nullでエラーが出るとは思えないです。
そうなんですよ
NULLに変換作業の時点でエラーが出てるのです

2015.09.11 20:32 | URL | #- [edit]
hatena says..."re:"

> NULLに変換作業の時点でエラーが出てるのです

Nz関数でエラーがでるということですか。
その時にエラーメッセージも提示してください。

2015.09.11 22:17 | URL | #5uE6dEgY [edit]

Leave a reply






Trackbacks

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