【備忘録】#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プロパティを取得しない(え

以上!!

φ(・ω・ )メモメモ


この記事が気に入ったらサポートをしてみませんか?