パソコン(ソフト)

【Access】VBAでBetween Andを使い範囲内のレコードをMe.RecordSourceにする

やりたい事は、

やりたい事

範囲選択したデータをレコードソースとしてフォームに表示させたい

 

しかし、VBAで、Between関数やら、テキストボックスの値などを設定したコードを動かすとなかなかメンドクサイ事があり備忘録に残しておくことにしました。

 

簡単なサンプルで実験

Me.RecordSource

簡単なサンプルで実験をしてみました。

果物リスト」と言うテーブルを作成して、適当にデータを打ち込みしました。

その後、フォームウイザードからフォームに起こして、範囲抽出する非連結のテキストボックスを設置しました。

between

 

 

Betweenを使ってレコードソースにするVBA

やりたい事として、IDを範囲選択してフォームのレコードセットにする事です。

IDは、id_startid_endという非連結のテキストボックスを設置して範囲選択されるようにしました。

id_endの範囲数値を入力したら、抽出されるようにVBAを設定しました。

between

 

Private Sub id_end_AfterUpdate()

Me.RecordSource = "SELECT * FROM 果物リスト WHERE ID Between " & Me.id_start & " and " & Me.id_end

End Sub


Private Sub コマンド11_Click()

Me.RecordSource = "SELECT * FROM 果物リスト"
id_start = Null
id_end = Null

End Sub

 

いつもながら、SQLの場合は、カンマやダブルコーテーションと言ったものを設置しなければエラーになる可能性があります。

 

今回は、範囲選択が数値型

だったので、上のコードのようになりました。

これが、日付などの期間の範囲だとちょっと複雑になり、#などを使わなければならないのでメンドクサイ

また、文字列も場合もちょっと記述が変わるので注意が必要であり、文字列の場合はBetweenというよりも、Likeなどを使った曖昧検索になるかと思います。

※日付と文字列は他のブログ記事にて解説することにします。

 

 

乗り越えられない範囲選択の場合

実験用サンプルなら、乗り越えらえない範囲選択での抽出なんていうケースは無いかと思われますが、自分の場合は、摩訶不思議な状態に遭遇しました。

どうしても、

ココに注意

フォームにデータが表示されないのです!

何度もコードを見直しデバッグをしましたが、乗り越えられませんでした。

&やカンマやダブルコーテーションなどの組み合わせも何度もやりましたが力尽きました。

そんな時は、クエリをレコードソースにすれば乗り越えられます。

 

between

 

Private Sub id_end_AfterUpdate()

Me.RecordSource = "果物リスト クエリ"

End Sub

 

なんかスマートじゃありませんが、クエリをひとつ作成すれば乗り越えられますので、なんどもチャレンジしても乗り越えられない時は、この方法を試してもいいかもしれません。

 

本当にAccessは癖スゴです。(´;ω;`)ウゥゥ

 

-パソコン(ソフト)
-, , , , , , ,

Translate »

© 2021 PCTips