ExcelとAccessのスキルアップをサポートするサイトです

ExcelとAccessの学習室

【Access VBA】効率よく伝票フォームに入力する方法(前編)

Accessを使う日常業務で最も頻繁に行われる作業は、単票フォームにデータを入力する作業です。

頻繁に行う作業だからこそ、正確かつストレスを感じない入力の仕組みになっているのがとても大事ではないでしょうか。
今回は、伝票フォームのデータをミスなく楽に入力する方法を紹介します。

特に、マスタデータ(商品情報や従業員データなど)を単票フォームに反映させる場合、単に手動でテキストボックスに入力するだけではミスが発生しやすいです。
入力ミスを防ぐためにも、手入力をさせずに単票フォームにデータを反映できる方法を準備しておく必要があります。

そこで、当ブログでは購買伝票の明細データを入力するときに使える、追加用フォームの活用方法を紹介します。
ここで解説した方法を実務に活かせば、ユーザーに手入力させずに明細登録が完了でき、その結果、入力ミスをかなり減らせるでしょう。
今回は、追加用フォームを起動させるまでの手順を前半分としてまとめました。

もちろん、動作を実現させるためのプログラムコードも公開しています。

サンプルデータベースは以下のリンクからダウンロードしてください。

≫ サンプルデータベース 「Input_SlipData_01」

完成品の動作

サンプルデータベースのフォーム「F02発注伝票M」を開きます。

サブフォーム下の「新規作成」ボタンをクリックします。

単票フォーム「F02発注伝票T」が開きました。

発注先を選びます。
発注先を選ばないと、部品を登録できない仕組みになっています。

発注先を選んだら「明細追加」ボタンをクリックします。
ここでは「ホームサイド」を選択しました。

伝票データ追加用のフォームが起動しました。

追加フォームのサブフォームデータを確認すると、単票フォームで選んだ発注先のみが表示されています。

今回の動作確認はここまでです。
続きは次回の後半部分で解説します。

発注先コンボボックス操作後に作動するコード

以下は発注先を選んだ後に作動するコードです。

Private Sub 発注先名_AfterUpdate()
    Me.担当者名.Value = DLookup("[担当名]", "T01発注先マスタ", "[発注先名]='" & Me.発注先名.Value & "'")
End Sub

Dlookup関数を使って担当者名を取得しています。
担当者を取得しなくでも問題ないのですが、このフォームは担当者データも伝票フォームに反映されるように作っています。

明細追加ボタンのクリック後に作動するコード

明細追加ボタンをクリックした後に作動するコードです。

Private Sub 明細追加_Click()

Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim SQL As String

'枝番枝番数の確認
Set CN = CurrentProject.Connection
    'レコードセットを取得
    Set RS = New ADODB.Recordset
    SQL = "SELECT 枝番 FROM T02発注伝票明細 Where 発注登録No=" & Me.発注登録No & "; "
    RS.open SQL, CN, adOpenKeyset, adLockOptimistic

    If IsNull(Me.発注先名) = True Then
        MsgBox ("発注先名が入力されていません。")
    ElseIf RS.RecordCount >= 5 Then
        MsgBox ("明細数が5件を超えています。" & vbCrLf & "新しい伝票を作成してください。")
    Else
        DoCmd.OpenForm "F01部品マスタ明細追加M", acNormal
        Forms![F01部品マスタ明細追加M]![発注登録No受渡用].Value = Me.発注登録No
    
        Forms("F01部品マスタ明細追加M").Controls("F01部品マスタ明細追加DS").Form.RecordSource = _
        "Select * From Q01部品マスタ明細追加用 where 発注先名= '" & Me.発注先名.Value & "';"

        'データの反映
        If RS.RecordCount = False Then
            Forms![F01部品マスタ明細追加M]![枝番受渡用].Value = 1
        Else
            Forms![F01部品マスタ明細追加M]![枝番受渡用].Value = RS.RecordCount + 1
        End If
    End If
'終了
RS.Close:  Set RS = Nothing
CN.Close:  Set CN = Nothing

End Sub

発注先が未選択の状態、または追加済の明細が5件以上の場合は、警告のみ表示させて登録処理は実行されません。

追加済の明細件数を調べるコードではADOが使われています。

上の条件をクリアしたら追加用フォームが起動します。
追加用フォームのサブフォームは、全件が表示されず、対象発注先のデータだけが表示されます。

まとめ

今回は検索フォームを起動させたところで終わりますが、次回は選んだ部品を実際に伝票明細に反映させていきます。