【備忘録】#Access (フォーム)レコードソースと(テキストボックス)KeyDownイベントの面倒な問題?
Accessでシステムを作っていてちょっとした問題?が発生したので、備忘録としてのメモ。
【発生した問題】
テキストボックス ”KeyDownイベント” が発生した時にTextプロパティを取得しようとするがエラーが発生する ※下記画像参照
【その時のコード(KeyDownイベント)】
Private Sub テキストボックス_KeyDown(KeyCode As Integer, Shift As Integer)
Dim inputVal As String
inputVal = Nz(Me.テキストボックス.Text)
MsgBox "入力された値:" & inputVal
End Sub
コードを見ると特に問題はない(はず)
【試したけどダメだったこと】
レコードソースに設定したSQLのFROM句にAsで別名にしているのを外した
LEFT JOINしていたのをやめてみた
ぱっと見で1テーブルに見えるようにサブクエリにしてみた
ぱっと見で1テーブルに見えるようあらかじめクエリを保存しておいてそれをレコードソースにした
テキストボックス.Text の直前で テキストボックス.SetFocus を書いてみた
【(たぶん)原因】
フォーム ”レコードソース” に2つ以上のテーブルを指定したSQLを設定
テキストボックス ”KeyDownイベント” でTextプロパティを取得しようとした
上記2つが重なるとダメっぽい。
【解決方法】
テキストボックス KeyDownイベントで入力値を取得する場合は、Valueプロパティを使う
Valueプロパティは他のコントロールにフォーカスが移らないと入力中の値が取得できないので、Valueプロパティを取得する直前に一旦他コントロールにSetFocusさせる
上記2つが嫌であれば、レコードソースに設定するテーブルが1つになるように設計、コーディングする(物理)
そもそもKeyDownイベント中にTextプロパティを取得しない(え
以上!!
φ(・ω・ )メモメモ