目次
VBAを利用して簡単な検索フォームを作成
こんにちは。伊川(@naonaoke)です。
今回は、ACCESSでカンタンな検索フォームを作成します。
【Ctrl+F】で検索もできますが、せっかくACCESSを操作しているので、正式な検索フォームを作成しましょう。
問題提起
(株)IKAWAの阿久 世子男(アク セスオ)は、上司から下記のような依頼を受けました。
・カンタンな検索フォームを作成すること。
・検索ワードは2つあり、検索窓を2つ作成すること。
・VBAを使って作成すること。
VBAは初めてで、どのようなコードを記載するの理解できません。
どうしたらいいだろうか?
解決策
・DoCmd.ApplyFilterで検索のコードを記載する・IF構文を使って条件分岐をする。
検索フォーム作成
検索フォーム作成手順 その1 データベースの確認
上の図のデータベースに関して、検索フォームを作成します。
こんなフォームを作成します。
検索フォーム作成手順 その2 検索フォームの土台を作成
「作成」⇒「空白のフォーム」を選択します。
「すべてのテーブルを表示する」を選択します。
「MT_データベース」を選択します。
MT_データベースのフィールの内容がすべて確認できました。
必要な項目を選択するのですが、今回は、すべて選択します。
こんな状態になります。
名前をつけて保存してください。
検索フォーム作成手順 その3 検索フォームの微調整をする
次に、名前をつけて保存したフォームを「デザインビュー」で開きます。
フォーム上の適当な場所で、右クリックします。
そして、フォームのプロパティを選択します。
レコードソースを、MT_データベースへ変更します。
「データ入力用」を、「いいえ」から「はい」へ変更します。
「フォームヘッダー/フッター」を選択します。
ヘッダー部分(バックの色が、ブルーの場所)に非連結のテキストボックスを2つ設置します。
上の図が検索窓(非連結のテキストボックス)の設置方法です。
「レコードの保存」「レコードの検索」ボタンを設置します。
検索フォーム作成手順 その4 検索フォームの重要な調整
車種IDは、テーブルが数値型なので、非連結のテキストボックスも、数値型へ変更します。
そうしないと、検索のコードを実行したときに、「型が一致しません」「クエリの演算子がありません」等、エラーの原因になります。
反対に、契約書番号検索は、書式には何も設定しません。
レコードの保存ボタンに仕込むコード
Private Sub コマンド57_Click() Me.[契約書番号検索] = "" Me.[車種ID検索] = "" DoCmd.RunCommand acCmdSaveRecord DoCmd.GoToRecord , , acNewRec End Sub
レコードの検索ボタンに仕込むコード
Private Sub コマンド56_Click() If Len(Me![車種ID検索]) > 0 Then DoCmd.ApplyFilter , "[車種ID] =" & Me![車種ID検索] & " " End If If Len(Me![契約書番号検索]) > 0 Then DoCmd.ApplyFilter , "[契約書番号] = '" & Me!契約書番号検索 & "'" End If End Sub
車種ID検索の更新後処理に仕込むコード
Private Sub 車種ID検索_AfterUpdate() Me.[契約書番号検索] = "" End Sub
契約書番号検索の更新後処理に仕込むコード
Private Sub 契約書番号検索_AfterUpdate() Me.[車種ID検索] = "" End Sub
テーブルのフィールドの型と、検索フォームの型は、必ず一致させます。そして、数値型と、文字型では、クォテーションが微妙に違います。
上の記事で解説していますので、参考にしてください。
まとめ
今回は、本当にVBAを使ってカンタンな検索フォームを作成しました。しかし、カンタンとはいっても、伊川が実際に業務で使っている検索フォームです。カンタンではありますが、ぜひ、みなさんのスキルにしてください。
今回のサンプルファイルは、No41です
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。