- ベストアンサー
AccessVBAでサブフォームの値チェック
- AccessVBAを使用してサブフォームの値チェックをする方法について教えてください
- サブフォームの値チェックを行った後にフォームを開くとフィールドの色が変わらず、黄色やマゼンタのままになってしまいます。この問題の原因を教えてください。
- Accessのバージョンは2003です。VBAを使用したサブフォームの値チェックでフィールドの色が正しく変わらない原因を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
shut0325です。 過去の質問も見たのですが、今回の処理の流れがイマイチ把握できません。 下記の様な感じでしょうか? 補足お願いします。 1.サブフォームを持つフォームである。 2.メインフォームにはいくつかテキストボックスがある。 3.サブフォームにはA B という名前の二つのテキストボックスがある。 という設定で、 a.メインフォームで「閉じる」ボタンを押すと、 サブフォームのA及びBの値に応じて、A Bの背景色を黄色/マゼンタにする。 b.サブフォームのテキストボックス全ての背景色を確認し、黄色であればそのテキストボックスの名前を、メッセージ格納用の変数に格納する。 c.メッセージ格納変数が空白でないならば、メッセージを表示し、空白ならばフォームを閉じ、F_フォーム1を開く。 これだと、a.の処理の際、全てのコントロールを確認しなくとも、AとBだけ参照して処理すればいいのかなと思ったので。 さて、こちらでも簡単なコードを書いてテストしてみましたが、閉じれば背景色は元の設定に戻るため、ご質問の様な現象は再現しませんでした。 原因はわからないですが、フォーム/サブフォーム共に、読み込み時(Loadイベント)に全てのテキストボックスの背景を白にするコードを追加することで解消できないでしょうか?
その他の回答 (1)
- shut0325
- ベストアンサー率40% (490/1207)
ざっとしかみていないのですが、ずっと下のほうの、 'ctrl.BackColor = vbWhite ↑これがコメントアウトになっているからでは?
補足
ご回答ありがとうございます。 説明不足ですみません。 ご指摘頂いた記述[ctrl.BackColor = vbWhite]に関しては 別のAccessで動作確認した際はもともとなかったものです。 今回問題のAccessにて正常動作しなかったので上記記述を追加しましたが こちらも以下エラーが表示され、正常動作しませんでした。 実行時エラー'91': オブジェクト変数または With ブロック変数が設定されていません。 以上の流れからコメントアウトにしました。 説明が不足していまして申し訳ありません。
お礼
尚、背景色の不具合についてはshut0325様が教えてくださった通り フォームの読み込み時の処理に背景色を白にするという記述をしたところ 解決しました!! こんな簡単な方法を、質問する前にどうしてこれが思い浮かばなかったのかと、 少々恥ずかしいです。トホホ どうもありがとうございました。すごく助かりました><
補足
ご回答ありがとうございます! shut0325様が書いて頂いた流れであってます。 ただひとつ補足のようなものがありまして… サブフォームにあるテキストボックスはA,Bの2つだけではなく C,D,E,F…と19個程あります。 現段階では動作確認のためA,Bの2つしかVBAでチェックをかけていませんが、 最終的には19個ある全てのテキストボックスに別々の値(上限)の指定をし、 入力チェックを行いたい意向です。 そうだとしても、確かに全てのコントロールを確認しなくても 良いような気がしました…(汗 余裕ができたら少し記述の見直しを実施したいと思います。 無駄な処理は書かない方が他の人がみてもわかりやすいと思いますし。笑