「Accessのフォームから連番を入力する方法」~VBAで関数にすると便利です♪~

最終更新日時 : 2015/01/28
LINEで送る
Pocket

「Accessのフォームから連番を入力する方法」~VBAで関数にすると便利です♪~

 

みなさん、こんにちは!つむぎです。
ブログの更新が、すこ~しあいてしまいました。
さて今回は、「Accessで主キーなどによく使う連番設定を、VBAを使ってサクッと乗り切っちゃおう!」っていうお話です。

 

通常、Accessではフォームなどを使ってデータを入力します。
フォームは、テーブルと連携していることが多いもの。
テーブルには、大体の場合「主キー(テーブルのデータの中から、ある一組のレコードを識別するために使用される)」を設定します。
よく使われるのが、連続番号をふる使い方。
今回は、連続番号をふるためにVBAで関数を作り、それをフォームのイベントで呼び出して、連続番号をふっちゃいましょう♪

 

①まず、AccessのVBAを記載する画面であるVBEエディタを開いてください。
参考までに、Accessを起動している場合は、[Alt]キー+[F11]キーを同時に押すとVBEエディタが起動します。(Windowsの場合)
※その他の方法でのBEエディタの開き方は、ご自身で調べてくださいね。

VBEエディタが開いたら、標準モジュール内に下記のように入力してください。
わたしは、「Base002」という名前の標準モジュール内に入力しました。

連番をふる関数(VBEエディタ)

 

このソースで、連続番号をふるための関数が作成されます。
ソースコードは、下記を参考にしてくださいね。

'1始まり採番設定
Function Saiban(TableName, Field)
On Error GoTo Err_Saiban
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim max_sql As String
    Dim i As Long

    Set db = CurrentDb
    max_sql = "SELECT max(" & Field & ") as MaxNO FROM " & TableName & ";"
    Set rs = db.OpenRecordset(max_sql, dbOpenDynaset, dbSeeChanges, dbPessimistic)

    If IsNull(rs.Fields(0)) = True Then
        i = 1
    Else
        i = rs.Fields(0) + 1
    End If

    Saiban = i

    rs.Close: Set rs = Nothing
    db.Close: Set db = Nothing

Exit_Saiban:
    Exit Function

Err_Saiban:
    MsgBox Err.Description
    If Not rs Is Nothing Then
        rs.Close: Set rs = Nothing
    End If
    If Not db Is Nothing Then
        db.Close: Set db = Nothing
    End If
    Resume Exit_Saiban
End Function

 

②次にフォームが持っているイベントから、上で作った「Saiban」関数を呼び出します。
わたしは、フォームが持っているイベントの中から、「挿入前処理イベント」に呼び出し用のプログラムを設定しました。

「挿入前処理イベント」

 

設定したプログラムの内容は、下記になります。

Private Sub Form_BeforeInsert(Cancel As Integer)
'フォームに何かデータを入れたら自動採番
     Me.ID(←フォーム上で連番を入力するテキストボックス名など) = Saiban("テーブル名", "ID(連番を格納しているフィールド名)")
End Sub

 

今回は、フォームに何か入力したら、「ID」という名前のテキストボックスに、連番が自動入力されるようになりました。
もちろん、[登録ボタン]などをフォームに作って、「ボタンのクイック時イベント」なんかに設定してもOKです。

関数にしておくことで、「テーブル名とフィールド名」を記載するだけで、どのフォームからでも連続番号がふれます。
ただし、今回の連続番号をふる関数は、グループごとにはふれませんので、あらかじめご了承くださいね。

 

今回は、わたしが普段良く使っている便利なチップスをご紹介しました。
みなさんのお役に立つと、うれしいなあ♪

 

LINEで送る
Pocket

PAGE TOP