- ベストアンサー
Accessのレポートについて
- Access2002で作成したシステムのレポートで、氏名の改行や縮小に関する問題が発生しています。
- 具体的には、14文字以上の氏名は改行され、15文字以上の氏名は縮小されて枠内に収まるように表示されます。
- 質問者はレポートのプロパティやイベントタブに記載されたコードを解読することができず、助けを求めています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 どうやら、第2引数についての推測は外れていたようで・・・(汗) 以下、各コードにコメントをつけてみましたのでご確認下さい: Function 氏名自動縮小(項目名 As Control, 初期サイズ As Integer, 縮小サイズ As Integer) Dim 文字サイズ, 項目幅 As Single Dim 基準文字数 As Long '表示コントロールの通常の文字サイズを設定(単位:point) '※これはここに入れるより、最後のIf文のElse句にした方がよいような気も・・・※ 項目名.FontSize = 初期サイズ '『全角』1文字の幅を算出(point単位をinch単位に換算:1point=1/72inch) '※等幅フォントが使用されていることが前提のようです※ 文字サイズ = 項目名.FontSize / 72 '表示コントロールの幅を算出(twip単位をinch単位に換算:1twip=1/1440inch) 項目幅 = (項目名.Width / 1440) '表示コントロール内に一度に表示できる最大字数を確認 '※ここは『半角』でカウント(→全角文字の半分の幅なので字数は2倍、と) 基準文字数 = Int(項目幅 / 文字サイズ) * 2 '表示する文字の長さ(→全角1文字は半角2文字扱い)を確認し、 '上で求めた最大字数を超えていたら縮小サイズを適用 If LenB(StrConv(項目名, vbFromUnicode)) > 基準文字数 Then 項目名.FontSize = 縮小サイズ End If End Function ・・・さて、改めて今回の現象についてですが、恐らく以下の1点を 修正すれば、解消するのではないかと思います: 【修正前】 基準文字数 = Int(項目幅 / 文字サイズ) * 2 【修正後】 基準文字数 = Int(項目幅 / (文字サイズ/2) ) ・・・要は、Int関数で整数にする際の、数字の「丸め」の問題です。 Ctrl+Gキーを同時押しするとイミディエイトウィンドウが開くので、試しに 以下の式を入力後、Enterキーを押して、結果を確認してみて下さい。 (1行入力毎に、(文字変換の確定とは別に)Enterキーを押します) ?Int(100/30)*2 ?Int(100/(30/2)) ?Int(100/60)*2 ?Int(100/(60/2)) 上の2つ、下の2つはそれぞれ式としては同じように見えますが、実際の 演算結果は、上の2つでは一致する一方、下の2つは不一致になります。 (先に「100/60」の段階で整数に丸めてから「2」を掛けると 100/60 = 1.666・・・ → 端数切捨てで「1」 → 「1*2」で「2」 となるのに対し、先に「60/2」を計算すると、 60/2 = 30 → 100/30 = 3.333・・・ → 端数切捨てで「3」 という結果になる、と) ・・・以上、参考まで。
その他の回答 (1)
- DexMachina
- ベストアンサー率73% (1287/1744)
> 下記を解読できずにおります。 「Call 氏名自動縮小(Me!氏名, 14, 9)」の『氏名自動縮小』というのは、 そのシステムの開発者が作成した独自の関数(またはSub)です。 なので、これだけでは「解読」には至れませんが(汗)、 > 15文字以上ある氏名は縮小されて、1行で枠内に収まって印字されます。 との説明から「推測」するなら、『氏名自動縮小』の第2引数が、縮小する しないの境目を指定しているのではないかと思われます。 (第1引数は縮小表示の対象とするコントロールの指定、第3引数は・・・ 縮小前か縮小後どちらかの、文字のフォントサイズでしょうか) 従って、現在開示されている情報から考えられる対策としては、上記の第2 引数の値を、「14」から「13」にして、14文字の名前も縮小表示の対象に 含めてしまうこと、ぐらいしか思いつけません(汗) ・・・以上、お粗末ではありますが、参考まで。 【参考】 VBAの編集画面(Visual Basic Editor(VBE))で、関数やSub、変数などを 右クリックするとメニューが表示されると思いますが、その中から「定義」を 選択すると、右クリックした対象(関数など)を規定したコードを表示できる ので、合わせて参考まで。 (なお、『参照設定』によって、別のMDBファイルで定義されていて、かつ、 そのコードがパスワードで保護されている場合、予めそのパスワードの 認証を通しておかないと、表示できません: さらに、そのファイルがMDEに変換済みだったりパスワードが不明だと、 (通常の手段では:特殊な解析でもしない限り)お手上げになってしまい ますが(汗))
補足
ご親切に、またご丁寧に回答いただき、ありがとうございました。 > VBAの編集画面(Visual Basic Editor(VBE))で、関数やSub、変数などを > 右クリックするとメニューが表示されると思いますが、その中から「定義」を > 選択すると、右クリックした対象(関数など)を規定したコードを表示できる > ので、合わせて参考まで。 ・・・と、ご教授いただき、表示してみたところ、下記のように表示されました。 ただ、これもまた解読できません。 お手数をお掛けして申し訳ないのですが、ご教授いただく訳にはいかないでしょうか。 Function 氏名自動縮小(項目名 As Control, 初期サイズ As Integer, 縮小サイズ As Integer) Dim 文字サイズ, 項目幅 As Single Dim 基準文字数 As Long 項目名.FontSize = 初期サイズ 文字サイズ = 項目名.FontSize / 72 項目幅 = (項目名.Width / 1440) 基準文字数 = Int(項目幅 / 文字サイズ) * 2 If LenB(StrConv(項目名, vbFromUnicode)) > 基準文字数 Then 項目名.FontSize = 縮小サイズ End If End Function
お礼
ありがとうございました。 ご丁寧な回答をいただき、痛み入ります。 大変勉強になりました。 ご教授いただいたことを基に研鑽を重ねたいと思います。