Microsoft Access Club >Access裏技Tips >このページ >次頁 < 前項 サイト内検索


1つのフォームで検索とデータ入力を行う : Access裏技Tips



得意先データを効率的に入力するには、識別IDで検索を行ってから追加データを入力することです。 ここでは、検索を行った後にデータ入力を行い、また新規の得意先の場合は登録まで行う技を紹介します。

検索とデータ入力を行う

  1. 得意先テーブル(tbl_main、tbl_sub)は、リレーション構築を行いメイン/サブの構成になっています。
  2. 得意先フォーム(frm_main、frm_sub)についても、同様です。
  3. フォームの作成は、Accessの新規フォーム作成ウィザードにそって作成します。
  4. 検索を行うためには、非連結のテキストボックスをフォーム上に作成します。
  5. このテキストボックスに入力された識別IDをもとにデータ抽出を行います。
  6. 該当の識別IDがテーブルにない場合は、初めての得意先として登録作業に入ります。

得意先フォームの作成

得意先フォームを作成します。

  1. 新規フォーム作成ウィザードで、得意先フォームを作成します。
  2. データ追加の可否は、既定値を"いいえ"にします。
  3. 検索用のテキストボックス(txt_識別検索)を作成します。

フォームを開く時イベントプロシージャ

フォームを開く時イベントプロシージャを作成します。

Private Sub Form_Open(Cancel As Integer)

On Error GoTo エラー

    Dim Count As Variant
    Count = DMax("ID", "tbl_main") + 1 ' --- A
        
    DoCmd.GoToControl "txt_識別検索" ' --- B
    Me.Filter = "ID =" & Count ' --- C
    Me.FilterOn = True ' --- D
        
    Exit Sub
    
エラー:

    If Err.Number = 2448 Then
        MsgBox "データを入力して下さい。", 16
    Else
        MsgBox "予期しないエラーが発生しました。エラーNo:" & Err.Number, 16
        End
    End If
    
End Sub
解説
  1. Dmax関数でメインテーブルの最大IDナンバーより1つ大きいIDを変数Countに代入します。
  2. テキストボックスtxt_識別検索にコントロールを移動します。
  3. コントロールソースのIDフィールドに変数Countの値でFilterを設定します。
  4. Filterを実行します。
留意点
  • 架空のIDでFilterを実行していますので、常にフォームにはデータが表示されない状況です。

txt_識別検索テキストボックス更新後処理イベントプロシージャの作成

txt_識別検索テキストボックス更新後処理イベントプロシージャを作成します。

Private Sub txt_識別検索_AfterUpdate()

    Dim i As Variant
    Dim Count As Variant
    Dim strmsg As String
    
    i = DLookup("識別ID", "tbl_main", "[識別ID]=" & Me.txt_識別検索) ' --- A
    Count = DMax("ID", "tbl_main") + 1 ' --- B
    strmsg = "過去のデータがありません。新規登録しますか?"
    
    If IsNull(i) = True Then ' --- C
        
        If MsgBox(strmsg, 17) = 1 Then ' --- D
            Me.AllowAdditions = True ' --- E
            DoCmd.GoToRecord , "", acNewRec ' --- F
            Me.txt_識別 = txt_識別検索 ' --- G
            Me.txt_氏名.SetFocus
        Else
            Me.Filter = "ID =" & Count ' --- H
            Me.FilterOn = True
            Me.txt_識別検索.SetFocus
            Me.txt_識別検索 = "" ' --- I
            End
                    
        End If
                
    Else ' --- J
            
            Me.Filter = "識別ID =" & i ' --- K
            Me.FilterOn = True
            Me.AllowAdditions = False
            Forms!frm_main!frm_sub.SetFocus ' --- L
            DoCmd.GoToRecord , "", acNewRec ' --- M
                
    End If

End Sub
解説
  1. DLookUp関数で、txt_識別検索テキストボックスに入力されたIDが存在するか否かチェックし、変数iに戻り値を代入します。
  2. Dmax関数でメインテーブルの最大IDナンバーより1つ大きいIDを変数Countに代入します。
  3. 変数iがNull値であれば、txt_識別検索テキストボックスに入力されたIDが存在しないので、新規得意先と判断します。
  4. 新期登録を行うか、ユーザーに対して問い合わせ、[OK]ボタンがクリックされれば、以下の処理に移行します。
  5. 追加データを可能にします。
  6. 新規レコードに移動します。
  7. txt_識別検索テキストボックスに入力されたIDを、txt_識別テキストボックスに代入します。
  8. 変数CountでFilterを設定します。
  9. txt_識別検索テキストボックスを空欄にします。
  10. 以下、既存の得意先処理です。
  11. 変数iの値でFilterを設定し実行します。
  12. サブフォームにフォーカスを移動します。
  13. 新規レコードに移動します。
今回のおすすめポイント

サブフォームのオブジェクト

メインフォームからサブフォームのオブジェクトを記述する式は、(メインフォーム名 + サブフォーム名 + サブフォームのオブジェクト名)とします。

txt_都道府県テキストボックス更新後処理イベントプロシージャの作成

txt_都道府県テキストボックス更新後処理イベントプロシージャを作成します。

Private Sub txt_都道府県_AfterUpdate()

    DoCmd.GoToControl "frm_sub" ' --- A

End Sub
解説
  1. サブフォームにコントロールを移動します。この記述がないと、メインフォーム間でフォーカスが移動します。

動作確認

  1. デザインビューからフォームビューに切り替えます。
  2. 識別ID1234を入力します。

  1. 既存の得意先が表示されます。

  1. 識別ID9999を入力します。
  2. 新規登録案内メッセージが開きます。


関連ページ

ページの先頭へ 前ページへ戻る

 


1つのフォームで検索とデータ入力を行う : Access裏技Tips


 

-Microsoft Access Club-

アメリカ合衆国やヨーロッパのデータセンターからcPanelレンタルサーバーをご提供します。お支払いは日本国内の銀行振込で...。1ヵ月契約からOKです。
アメリカ合衆国やヨーロッパからcPanelレンタルサーバー。
お支払いは日本国内の銀行振込。
最短契約期間は1ヵ月契約からOKです。