Microsoft Access 掲示板

プロシージャの使い方 / 7

14 コメント
views
4 フォロー
7
hiroton 2024/03/07 (木) 10:25:27 48496@f966d

そうですね。モジュール(VBA記述画面)だけを見ていると理解できないんですが、各コントロールのプロパティで[イベント プロシージャ]を指定して自動生成できるプロシージャはその引数に特別な意味を持つ特別なプロシージャになります

これらは、コントロール名_イベント名([引数])の書式になり(引数はイベントによりあったりなかったり)自動生成せずに、モジュールで直接記述(コピペ)してからコントロールに[イベント プロシージャ]を設定しても同じです。データ上はただのテキストでしかありません

このようなちょっと理解しにくい仕組みの上で、コンボ_KeyDownプロシージャの中でKeyCodeを操作すると、実際のACCESS上でのキー入力を制御できるという仕組みが成り立っています


前の質問でも少し言葉が出ましたが、「スコープ」が問題になります

Private Sub コンボ_KeyDown(KeyCode As Integer, Shift As Integer)

End Sub

「このプロシージャで宣言されているKeyCodeという引数を操作することにより、ほにゃららできる」というのが諸々の趣旨になりますが、引数はそのプロシージャの中でのみ有効です
hirotonの指摘の本質ですが、「コンボ_KeyDownプロシージャの中で記述したKeyCodeのみ」が、その時のキー操作の制御に影響します。その他の場所で記述されたKeyCodeは、それが有効となる宣言方法に従って動作します

やりたいことは「コンボ_KeyDownプロシージャの中KeyCodeの操作」なので、どんなに他の場所でKeyCodeの変数宣言を行っても「コンボ_KeyDownプロシージャの中KeyCode」を変更することはできません。これは、不意の動作が行われないように守られているとも言えますし、「KeyCode」という簡単な名前を至る所で使うことに問題がないようになっているとも言えます。これが、スコープ問題というやつです


ここまで理解した上でようやく、スコープが制限されている値を変更するためにはどうしたらいいか?スコープを跨ぐ方法は?となります。ここまで来れば、hatenaさんの回答につながる(回答を見て理解できる)でしょう

通報 ...