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

禁則処理オンのときの印刷時拡張のバグ

下図をみてください。右側の「印刷時拡張」が「いいえ」の場合は3行のデータですが、
印刷時拡張が「はい」のテキストボックスは2行分しか拡張せずに末尾の“いい”が表示されてません。

印刷時拡張バグプレビュー
元ネタは下記の掲示板での質問です。

レポートの印刷時拡張を設定したテキストボックス末尾で拡張しない場合がある

Access2003、2007, 2010 で確認しましたが、すべてのバージョンで同じ症状が確認できました。(追記 2013 でも改善見られず)

印刷時拡張のバグとしては下記のが有名ですが、Access 2002 で修正されているので、これとは異なるバグです。

[ACC2000]行間を設定している場合印刷時拡張が正しく動作しない

今回は、このバグの原因と対策について考えてみます。

難易度:

再現手順

詳細に、下記のテキストボックスを配置します。

プロパティ設定値
7cm
フォント名MS ゴシック
フォントサイズ10
印刷時拡張はい
上余白0.101cm
下余白0.101cm
左余白0.101cm
左余白0.101cm

コントロールソースのフィールド値が、
ああああああああああああああああ20mL,ああああ10mLああああああ10mLあいい
のとき、正しく拡張しません。(冒頭の図を参照)

原因推測

禁則文字「,」を「 」(全角空白)に置換すると、正しく拡張します。

印刷時拡張禁則文字無しプレビュー

このことから、禁則処理で禁則文字が次行に送り出されて行数が増えたとき、正しく印刷拡張されないと推測されます。Access君は帰国子女なので日本特有の機能は苦手のようです。

不思議なことにレポートビューだと正しく印刷時拡張されます。

印刷時拡張レポートビュー

対策

Access2010 でも修正されていないということはMSはおそらくこのバグを認識していないと思われます。早急な修正は期待薄なので、とりあえず対策を考えてみましょう。

最後の行が表示されないので、フィールドデータに改行+全角空白を追加しておくというのはどうでしょう。
テキストボックスのコントロールソースを

=[フィールド名] & Chr(13) & Chr(10) & " "

これなら1行だけ足りない場合は表示できます。禁則処理が行数に影響を及ばさない場合は、余分に1行分拡張されてしまいますが、表示されないよりはましです。

しかし、禁則処理による行数増加が1行とは限りません。複数行増加する場合はやはり末尾が表示されない場合もでてきます。
下図は末尾の2行が表示されてません。

印刷時拡張バグ2行非表示プレビュー

このような危険性にそなえて数行の改行を末尾に追加しておきますか。

いや、そんな妥協はイヤだ!!!

えーい!!MSなんかに頼ってられるか、Access君の禁則処理はオフにして、自前で禁則処理をしてやろうじゃないか。

そういえば、hatenaが密かに師と仰ぐRURI++さんが禁則処理関数を公開されていたはずだ。

禁則処理:Microsoft Access ちょっと役立つ? 小技集

上記のページの関数をコピーして標準モジュールにはりつけて、テキストボックスのコントロールソースを

=Kinsoku([フィールド名],34)

と設定します。

印刷時拡張禁則処理関数使用プレビュー

右のテキストボックスと折り返し位置が異なるのは、Access君は「送り出し禁則」、関数の方は「ぶら下げ禁則」、と処理方法がことなるからです。

また、この禁則処理は、ワードラップ(英単語の途中で改行されないようにする処理)には対応してません。また、プロポーショナルフォントだと、改行位置が揃わない、という制限があります。

禁則関数の場合、20mL の真ん中で改行が入っています。
印刷時拡ワードラップ有無比較プレビュー

サンプルファイル が下記からダウンロードできます。
RptCanGrowBug_07.zip (Access 2007 形式 - 25kb)
RptCanGrowBug.zip (Access 2002-2003 形式 - 23kb)
RptCanGrowBug_2k.zip (Access 2000 形式 - 25kb)

拍手する

Leave a reply






Trackbacks

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