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

帳票フォームでレコード毎にテキストボックスの表示/非表示を切り換えたい

表形式フォームで FieldA のデータが英字のみの場合、FieldBを表示、それ以外は非表示にしたいのですが、VisibleをTrueやFalseにすると、表全部がなってしまい、行単位で表示、非表示ができません。

帳票フォームテキストボックス非表示

Accessの帳票フォームで「可視」プロパティをVBA等で変更した場合は、すべての行に反映されます。プロパティがレコード数分存在するわけではないのでしょうがないことです。

「条件付き書式」を使って使用不可にすれば、画像の上のフォームのようにグレーアウトして入力不可ということが視覚的に区別できようにすることはできます。

実用上はこれで十分だとは思いますが、下のフォームのように完全に消したいという要望も意外と多いようです。

今回は、この完全に消す方法を紹介します。さらに、「英字のみ」の判定方法も付録で付いてきます。

難易度:

まずは、条件付き書式の設定から。

FieldBのテキストボックスの条件付き書式で、「条件1」の 式 を

[FieldA] Like "*[!A-Z]*"

と設定、書式の「有効」ボタンをクリックしてフラットにします。

条件付き書式の設定画面

これで、FieldA に英字以外が入力されているとグレーアウトして入力できなくなります。

さて、テキストボックスを完全に非表示にする方法ですが、実際に非表示にすることは不可能ですので、セクションの背景色と同じ色のテキストボックスを上に配置して、それで隠すという方法になります。

まず、FieldB のテキストボックスの上に覆うようにテキストボックスを配置します。このテキストボックスのプロパティを下記のように設定します。

プロパティ設定値
コントロールソース=IIf([FieldA] Like "*[!A-Z]*","gggg","")
フォント名Webdings
フォントサイズ24
立体表示なし
背景スタイル透明
境界線スタイル透明
前景色(詳細セクションの背景色と同じに)
タブストップいいえ
名前txtHideB

このテキストボックスのフォーカス取得時のイベントプロシージャを下記のように記述します。

上記の条件付き書式の設定と合わせて、設定してください。

「英字(アルファベット)以外が含まれていたら」の判断式は、

[FieldA] Like "*[!A-Z]*"

です。Like演算子のパターンマッチングで、[A-Z] は「AからZまで」という意味で、大文字/小文字の区別はしないので、「アルファベット全て」という意味になります。!を付けるとそれ以外ということになりますので [!A-Z] は「アルファベット以外」です。「Like "*[!A-Z]*"」で「アルファベット以外の文字が含まれていたら」という条件式になります。

サンプルファイルが下記からダウンロードできます。
FrmHideTextBoxInContinuousForms_07.zip (Access 2007 形式 - 27kb)
FrmHideTextBoxInContinuousForms.zip (Access 2002-2003 形式 - 22kb)
FrmHideTextBoxInContinuousForms_2k.zip (Access 2000 形式 - 17kb)


拍手する

Leave a reply






Trackbacks

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