みなさん、こんにちは!つむぎです。
ブログの更新が、すこ~しあいてしまいました。
さて今回は、「Accessで主キーなどによく使う連番設定を、VBAを使ってサクッと乗り切っちゃおう!」っていうお話です。
通常、Accessではフォームなどを使ってデータを入力します。
フォームは、テーブルと連携していることが多いもの。
テーブルには、大体の場合「主キー(テーブルのデータの中から、ある一組のレコードを識別するために使用される)」を設定します。
よく使われるのが、連続番号をふる使い方。
今回は、連続番号をふるためにVBAで関数を作り、それをフォームのイベントで呼び出して、連続番号をふっちゃいましょう♪
①まず、AccessのVBAを記載する画面であるVBEエディタを開いてください。
参考までに、Accessを起動している場合は、[Alt]キー+[F11]キーを同時に押すとVBEエディタが起動します。(Windowsの場合)
※その他の方法でのBEエディタの開き方は、ご自身で調べてくださいね。
VBEエディタが開いたら、標準モジュール内に下記のように入力してください。
わたしは、「Base002」という名前の標準モジュール内に入力しました。
このソースで、連続番号をふるための関数が作成されます。
ソースコードは、下記を参考にしてくださいね。
'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です。
関数にしておくことで、「テーブル名とフィールド名」を記載するだけで、どのフォームからでも連続番号がふれます。
ただし、今回の連続番号をふる関数は、グループごとにはふれませんので、あらかじめご了承くださいね。
今回は、わたしが普段良く使っている便利なチップスをご紹介しました。
みなさんのお役に立つと、うれしいなあ♪





















