★AccessVBA ~ 料金別納郵便ハガキ・宛名面 ~ テキストボックスの大きさに合わせて文字を小さくする方法(横書き、縦書き。ただし、レポートのみ。フォーム不可。)

※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。

  

★料金別納DMハガキのサンプルファイル

※もとからレポートでしか使えないプログラムです。フォーム不可です。
 フォームで使いたい場合は、AIに作り替えてもらってください。

  

32bitのAccessと64bitのAccessでは、作りが異なるので、それぞれ専用のmdbないし、accdb、を作ったほうがいいです。

特にAccessのハガキウィザードを使ったとき。
Win32APIを呼び出すのですが、64bitだと、それ専用に書き変えないとエラーになります。
ただ、単純に仕様通りに「PtrSaf」つけたり「LongPtr」や「LongLong」などを使ったりしてもダメでした。(更には、AIに作ってもらってもダメでした。)
64bitのAccessの場合は、もともと「Yubin7.dll」が無いこともあるのかもしれません。
わかりませんが・・・。

基本、以降にご提示した「テキストボックスの大きさに合わせて文字を小さくする」というプログラムは、そのあたりには依存しないのであまり心配はないのですが、ただ、「ハガキウィザードにて郵便番号や顧客住所などを自動で表示(あるいは印刷)するようなプログラム」では少し気をつけてください。
(ハガキウィザードが作ってくれたコードやテキストボックスを削らないといけないことがあります。)

  

★Accessのハガキウィザード作ったレポートのテキストボックスを、郵便番号以外を無効化する方法
(ウィザードで自動作成されたテキストボックスを消しても大丈夫にする方法)

詳細セクションのFormatイベントのコードを、
「Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)」
からすぐ下の変数宣言の部分は一応残しておいて、
そのすぐ下以降の部分は全部消すか、コメントアウトします。

レポートデザイン画面のテキストボックスは、氏名と住所と差出人のそれらは消すか、小さくして非表示氏にしてOKです。

郵便番号付近や宛名や住所の付近の小さなテキストボックスらしきものは、消すとエラーになるものは残しておき、非表示設定にします。

一度に全部消すと、エラーになるかもなので、1つ1つ、「消す」「レポート表示」を繰り返して、逐一確認しながら消してください。

プログラム側を消してしまったので、「逆に残すとエラーになる」なんてこともあるかもしれません。
その場合は消してしまってください。

  

  

★横書きテキストボックスの場合の、プログラムの呼び出し方法

Accessのハガキウィザードで作ったDMなどは、例えば前項のように「たくさん消してしまったコード」の部分に、以下のように書き足して縮小表示をします。

Call FontMinimize01(Me, Me("tbx_氏名"), 30)

ウィザードでのハガキ以外のレポートなら、好きな場所に書いて縮小表示を実行します。

なお、Meの部分は、レポートのオブジェクトそのものを指定します。
(ただ、基本、Meのままでいいです。もとからレポートでしか使えないプログラムなので。フォーム不可です。もしフォームでも必要なら、AIに作り替えてもらってください。)

「"tbx_氏名"」の部分は、縮小表示したいテキストボックスなどのコントロール名を書きます。

30、18、15、などのラスト部分の数字は、
「縮小表示したいテキストボックスなどにおける、その最大フォントサイズの上限設定値」です。

  

★縦書きテキストボックスの場合の、プログラムの呼び出し方法

Accessのハガキウィザードで作ったDMなどは、例えば前項のように「全部消してしまった」部分に、以下のように書き足して縮小表示をします。

Call FontMinimize01_tate01(Me, Me("tbx_氏名"), 30)

ウィザードでのハガキ以外のレポートなら、好きな場所に書いて縮小表示を実行します。

こちらも、Meの部分は、レポートやフォームのオブジェクトそのものを指定します。
(ただ、基本、Meのままでいいです。もとからレポートかフォームでしか使えないプログラムなので)

「"tbx_氏名"」の部分は、縮小表示したいテキストボックスなどのコントロール名を書きます。

30、18、15、などのラスト部分の数字は、
「縮小表示したいテキストボックスなどの最大フォントサイズの上限設定値」です。

  

★横書きテキストボックス用のプログラム(標準モジュールにコピペ)

※本当は「i_BaseSize」という変数をも引数にして「MAXFONTSIZE」(フォントの大きさの最大上限値)とは区別したほうがいいのですが、今回は一緒にしてしまっています。

「i_BaseSize」は、各テキストボックスの既定のフォントの大きさです。
横書き用では今回は使っていません。
今回は、「MAXFONTSIZE」を越えることはもとからないので、横書き用では「MAXFONTSIZE」1本で行ってしまいました。

ただ、この先、もし、「MAXFONTSIZE」と「i_BaseSize」の値を異なる値にしないといけないようなことが出てこれば、そのときはそのように書き変えが必要です。
「i_BaseSize」を4つ目の引数にする、ということです。

※このプログラムは、少しトリッキーなことをしています。
詳しくやヒントはこちら(AIに聞いたこと)→「access_report_tbx-font-size-mini-hint01.pdf

・以下、AIが、フォントサイズの初期化をして小さくなりすぎない様に修正してくれたもの
(サンプルのmdbやaccdbには入っていません。)

  

・以下、AI修正前のもの(サンプルのmdbやaccdbには入っています。)

  

★縦書きテキストボックス用のプログラム(標準モジュールにコピペ)

※以前のプログラムは32bitだと「住所2(ビル名など)」の列がNull(空白)でもエラーが出なかったのですが、64bitのときはエラーが出るので一応両方でエラーが出ないようにはしてみました。
ぜんぜん完全じゃないのでエラーが出たらご自分で直してください。

※本当は「i_BaseSize」も引数にして「MAXFONTSIZE」(フォントの大きさの最大上限値)とは区別したほうがいいのですが、今回は一緒にしてしまっています。

「i_BaseSize」は、各テキストボックスの既定のフォントの大きさです。
今回は、「MAXFONTSIZE」を越えることはもとからないので、同じ値にしてしまいました。

ただ、この先、もし、「MAXFONTSIZE」と「i_BaseSize」の値を異なる値にしないといけないようなことが出てこれば、そのときはそのように書き変えが必要です。
「i_BaseSize」を4つ目の引数にする、ということです。

※このプログラムは、少しトリッキーなことをしています。
詳しくやヒントはこちら(AIに聞いたこと)→「access_report_tbx-font-size-mini-hint01.pdf

  
  

★DMハガキ用。数字を漢数字に変換する。
Accessのハガキ印刷の宛名印刷の場合、テキストボックスのコントロールソースで使います。


=SafeToKanjiNum(StFixDashCharForVert([住所1]))

  

★DMハガキ用。ハイフンを縦書きハイフンに変換する。
こちらも、Accessのハガキ印刷の宛名印刷の場合、テキストボックスのコントロールソースで使います。

※以前のプログラムは32bitだと「住所2(ビル名など)」の列がNull(空白)でもエラーが出なかったのですが、64bitのときはエラーが出るので一応両方でエラーが出ないようにはしてみました。
ぜんぜん完全じゃないのでエラーが出たらご自分で直してください。