みなさん、こんにちは!つむぎです。
ブログの更新が、すこ~しあいてしまいました。
さて今回は、「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です。
関数にしておくことで、「テーブル名とフィールド名」を記載するだけで、どのフォームからでも連続番号がふれます。
ただし、今回の連続番号をふる関数は、グループごとにはふれませんので、あらかじめご了承くださいね。
今回は、わたしが普段良く使っている便利なチップスをご紹介しました。
みなさんのお役に立つと、うれしいなあ♪