pickup

目次

DLOOKUPで見つからないときは、入力処理を行う

こんにちは。伊川(@naonaoke)です。

DLOOKUP関数で値がみつからないときに、テーブルにデータを入力するのは面倒ですね。

そんな時に、入力するテーブルが自動で表示されたら便利ですよね。

自動でテーブルを起動する技を紹介します。

また、同じような記事を紹介していますので、ぜひ合わせて読んでみてください。


問題提起

 

(株)IKAWAの阿久 世子男(アク セスオ)は上司から下記の依頼を受けました。

DLOOKUP関数で何も表示されないときに、簡単に処理できるようにしてほしい。

どのような方法があるだろうか?

解決策

 

回答
sesuo2.jpg
・DAO Recordset Nomatch Seekを使って検索する。
・値追加の処理方法記載する。

レコード追加手順

今回は、すこし、組み合わせるパーツが多いので、難しいかもしれません。

ただし、今回の内容は、テーブル全部を検索します。

あまりにも、データが多いと、処理が遅くなるので、注意しましょう。

レコード追加手順 作成手順その1 データベース確認


上の図のようなテーブルがあります。


社員IDを入力したときに、なにも表示されない場合の処理方法を記載します。

社員IDの更新後処理にコードを記載します。

レコード追加手順 作成手順その2 コードを仕込む


Option Compare Database


 Private Sub 社員ID_AfterUpdate()

  Dim ctDBname As String: ctDBname = CurrentProject.Path & "\" & "DLOOKUP2.accdb"
  Dim Ws As Workspace
  Dim db As DAO.Database
  Dim Rs As DAO.Recordset
  
  Dim rc As Integer

  Set Ws = DBEngine.Workspaces(0)
  Set db = Ws.OpenDatabase(ctDBname)
  Set Rs = db.OpenRecordset("MT_社員", dbOpenTable)

  
  With Rs
    .Index = "PrimaryKey"
    .Seek "=", Me.社員ID

    If .NoMatch = True Then
     rc = MsgBox("追加処理を行いますか?", vbYesNo + vbQuestion, "確認")
    If rc = vbYes Then
        MsgBox "追加処理を行います"
        DoCmd.OpenTable "MT_社員", acViewNormal, acEdit

   Else
        MsgBox "追加処理を中断します"
    End If
    End If
    
  If .NoMatch = False Then

  Me![氏名] = DLookup("氏名", "MT_社員", "社員ID='" & Me![社員ID] & "'")
  Me![部門] = DLookup("部門", "MT_社員", "社員ID='" & Me![社員ID] & "'")
       
  End If
  End With
  
  
  
  

End Sub


Private Sub 部門ID_AfterUpdate()


Me.[社員ID] = DLookup("社員ID", "MT_社員", "部門ID=" & [部門ID])
Me.[氏名] = DLookup("氏名", "MT_社員", "部門ID=" & [部門ID])
Me.[部門] = DLookup("部門", "MT_社員", "部門ID=" & [部門ID])

End Sub

レコード追加手順 作成手順その3 コードを実行する





デーブルが開きました。

ここで、A006の社員を追加登録します。

追加処理をしない場合は、割愛します。

今回のコードの内容

トランザクションや、DAOなど、難しい内容が多いです。

トランザクションとは、取引の意味です。

イメージ的には、今回の場合においては、社員IDを探す場所を確保するというような意味です。

そして、社員IDを探す、見つける、見つけないというのが、トランザクション(取引)の一環なのです。

ここがポイント

 

ここがポイント
Function8.png
難しい内容は、その英語の意味から、想像します。今回のトランザクションなどは、取引という意味でした。そのトランザクションで、ACCESSがどのような動きをしてるのかを想像すると理解が早まります。

 

スポンサーリンク

まとめ

今回のまとめ
sesuo6.jpg
難しい内容でも、自分なり理解を深めている阿久 世子男(アク セスオ)です。特に、DAO等このようなことを理解していくとACCESSは本当に面白くなります。

今回のサンプルファイルは、No71です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事