忍者ブログ
24 April

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

28 February

【Accessフォーム】怪現象、謎の「01」【追記あり】

ある日の私は、ユーザーさんに年末年始休みを登録してもらうためのカレンダーフォームを自作していた。
 各年の土日と祝日データを作成し、それを元に、ぽちぽちクリックして赤文字にして貰った日付を、テーブルにデータとして追加するのである。

 Access2003辺りからは、アクセスも条件付き書式をフォローしているが、当社でメインで活躍しているのは、Access2000。
「ここにチェックが入ってたら赤くなる文字」は、アクセスの元々の制御では作れないため、工夫が必要だ。

 日付一つに、枠を持つ黒文字のテキストボックスと、枠と背景色が透明な赤文字のテキストボックスを重ねて配置している。
 休み情報が無ければ、その日付を黒側に、あれば赤側に入れる。
 ユーザーさんがクリックしたら、日付が入っている方から、入ってない方へ値をそのまま移し、元の値を消す。

 というのが、Access2000において、値の内容で書式を変えたい時のスタンダードなやり方だと思っている。


 テストを進めるうちに、何故か木曜日の列だけ、クリック後の赤文字が「01」という表示になるバグが発生。




 ……おい、その「01」、どこから持ってきた。


 この数字は、非連結のテキストボックスへ、Day関数で持ってきたそのままを入れてるので、当然頭に0とか入らない。
 テキストボックスの書式プロパティを見ても空欄である。

 機能としては、一つの枠に、黒文字_0~41、赤文字_~、チェック_~の、三つのオブジェクトが重なって、一つの日付を扱っている。
 チェックボックスのクリック時に、チェックボックスの名前の数字を同じプログラムに渡すことで、対応したそれぞれの位置の赤文字や黒文字をコントロールしている。
つまり、このカレンダーに42個ある枠は、全て同じ制御下にあるのだ!木曜日の列の渡し値がおかしいとか、そんなことも無い。


 訳 が 分 か ら な い よ …!!


 そして、表示が01になっているテキストボックスのValue値をデバッグで見ても、正しい値が入っている。
 この画像で言うならば、「16」だ。16が入っている。しかし表示は「01」だ。

------------------------
イミディエイト
------------------------
debug.print forms("F_カレンダー").赤文字_17.value ' ←オブジェクトの連番は0番から。このカレンダーの1日は2番目から値が入っているので、16日は17番となる。
16
------------------------

 なので、チェックを外すと、黒文字の「16」になる。(正しい)


 やっぱり──訳 が 分 か ら な い よ …!!


 該当列のプロパティをチェックしたりフォームを閉じたりしているうちに、何故か、第一週と第二週が直った…。プロパティは変更していない。


 全く──訳 が 分 か ら な い よ …!!


 正常に動いている列を丸コピしてくれば、直るような気はするのだが、42個×3のオブジェクトをびっしり綺麗に並べて、全てに名前をつけるのはそれなりに手間なんである。オートで付けられていたタブストップ順も直さないといけない。
 障害が出ているのが、たかだか6個や4個とは言え、直る保証もないのにイマイチやりたくない。

 直るなら、全部直ってくれよ!たのむよー!><
-----------------------------------------------------------------

 ……なおっ、た……!

 ・前述のコピーペーストでは直らなかった(泣)
 ・2週目は、直っていたのではなく、2週目の値が一桁の時に症状が出てなかった。(一週目は二桁が入らないので症状が出なかった)

     ↓

 「エクセルで、セル幅が小さいときに*とかになるアレかー?!!!」

     ↓

 木曜日赤文字のテキストボックスの幅を広げたら直った。

 ぐすん…。気づくの遅いよバカ。
 結論としては、テキストに変換してから入れておけば、こういう表示にはならなかった気がします。
 しかしそれも、どうなのだ。内容によって、適切な手段は異なってきそう。

 ……しかし、この「01」、フォームからコピーペーストしても「01」だったぞ…?使用不可プロパティ設定してたから…?

拍手

PR