質問: "こんにちは" というコードでテキストボックスの文字を変更します。 この時、テキストボックスの値が変更されたという条件でまた別のコードを動作させたいのですが、テキストボックスのイベントである、「更新前処理」「更新後処理」「ダーティー時」「変更時」では、動作しませんでした。 テキストボックスの値を変更する段階で別のコードを入力すれば対応は可能なのですが、「テキストボックスの値を変更した時」のタイミングで別コードを動作させることで、コードをまとめたいと考えています。 これに対して良い方法はありますか?よろしくお願いします。
回答: #1です > 通常状態で触れさせないようにする良い方法はないでしょうか? vba は大丈夫だったでしょうか。 考え方をちょっと変えてみます。 テキストボックス「テキスト0」をいじらせたくないので、enabled / locked で制御している。 ↓ テキストボックス「テキスト0」の enter で異なるコントロールに focus を移動する。 例えば、テキストボックス「テキスト0」の フォーカス取得時に以下を記述しておきます。 private sub テキスト0_enter() me.テキスト1.setfocus end sub この場合、「テキスト0」にフォーカスが入ろうとした場合、「テキスト1」に無条件で移動させます。 意味合い的に、「テキスト0」にはフォーカスが入らないので修正等できません。 では、テキスト0.text にどうやって値を設定し、イベントを発生させるかですが・・・・ 一旦、「テキスト0」の フォーカス取得時を無効にしてから設定して、終わったら戻します。 dim ctl as control dim ss as string set ctl = me.activecontrol ss = me.テキスト0.onenter me.テキスト0.onenter = "" me.テキスト0.setfocus me.テキスト0.text = "こんにちは" ctl.setfocus me.テキスト0.onenter = ss 今の アクティブコントロールを覚えておいて、 フォーカス取得時を無効にして、 "こんにちは" を設定して フォーカスを元のところに戻して、 フォーカス取得時を有効にして・・・・ お礼にあった記述と変わらないですかね・・・・(上記コードは未検証) また、違う方法と言えば、手間でも自分で呼び出す・・・・ 設定後、「テキスト0」の更新後処理を動かしたい場合、 me.テキスト0.value = "こんにちは" call テキスト0_afterupdate とすれば、同じことになると思います。 ※ フォーカスがあるうちに、enabled = false はエラーになったような・・・・ ※ ご質問の内容をもう一度読み直してみました。 > テキストボックスの値を変更する段階で別のコードを入力すれば対応は可能なのですが、「テキストボックスの値を変更した時」のタイミングで別コードを動作させることで、コードをまとめたいと考えています。 という事ですが、アクセスで用意されているイベント(フォームに関して)は、操作する人がいること・・・ が、主だと思います。 vba とかで値を設定する・・・・操作の範疇じゃないので自分で面倒をみることになると思います。 上記での setfocus しないとイベントが発生しない・・・・操作していればあたり前のことなので・・・ enabled = false / locked = true にした状態のものの、変更イベントを取りたい・・・ 私にはチョッと理解できない部分になります。 ※ 他の方の回答を待ってください ※ 解釈違い等あれば、ごめんなさい。