前回までに、登録した文書管理番号の情報を閲覧できる機能を実装してきました。今回は、採番するための機能として自動採番の方法を紹介していきます。
VBAによるコーディングを行うため、一見難しそうに見えるかもしれませんが、一つずつ内容を確認していただければさほど難しいものではないとご理解いただけると思いますので、宜しくお願いいたします。
また、VBAのコーディングについては様々な事例を見ることが必要だと思います。
スポンサーリンク
フォームにおける自動採番
文書番号の管理に際して、ユーザーが自由に入力できてしまうと、不整合の要因となります。したがって、文書管理コードと年度の内で、最新の番号を自動取得できるように機能を実装していきます。
また、連番に係るテキストボックスへの入力はできないように設定をします。
まずは、前回までに作成している「t_連番」テキストボックスのプロパティシートを開き、編集ロックプロパティを「はい」とします。これでユーザー側からフォーム上への値入力を禁止することができます。あくまでも採番は自動で行うことを主眼に置いています。
続いて、文書管理コードあるいは年度の値を更新した都度、当該文書コード体系に基づく最新の連番を取得するように、VBAによるコーディングを行います。
まずは、VBA画面を開き「採番」プロシージャを設定します。なお、プロシージャの設定方法については以下の記事を参考にしてください。
さて、ここからVBAによる最新連番の取得ルーチンを実装します。今回はADOを用いたコーディングとしますので、VBA画面の中で参照設定からMicrosoft ActiveX Data Object 6.1 Libraryにチェックを入れます。
ADOについては、以下の記事を参照していただければと思います。
続いて、自動採番するためのコーディングをします。「採番Subプロシージャ」を作成した後、以下のようにコードを記載します。
Public Sub 採番() '文書管理コードあるいは年度が入力されていない場合は処理を中止する。 If Me.t_文書管理コード = "" Or IsNull(Me.t_文書管理コード) Or Me.t_年度 = "" Or IsNull(Me.t_年度) ThenMe.t_連番 = 0
Exit Sub
End If 'ADOによる処理に向けた変数宣言 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MaxNumber As Integer: MaxNumber = 0 'データベースへ接続 Set cn = CurrentProject.Connection 'T_管理テーブルを開く rs.Open "T_管理", cn, adOpenKeyset, adLockOptimistic 'フィルタリングで必要な情報を取得する。 rs.Filter = "文書管理コード = '" & Forms!F_Main.t_文書管理コード & "' AND 年度 = " & Forms!F_Main.t_年度 '当該レコードで最大の連番を取得する。 Do Until rs.EOF = TrueIf rs!連番 > MaxNumber Then
MaxNumber = rs!連番
End If
rs.MoveNext
Loop '最大の連番に1を加えた値をテキストボックスに反映する。 Me.t_連番 = MaxNumber + 1 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub
ここまでで、自動採番するコーディングができましたので、これを動かすためのイベントを設定します。
今回は、文書管理コードあるいは年度を更新した際に、これら値をに紐づく文書番号の内で最新のものを取得するようにします。
したがって、「t_文書管理コード」コンボボックスの更新後処理プロパティにイベントプロシージャを設定し、さらに次のコードを実装します。(これは、前回作成したコードに追記する形をとります。)
Private Sub t_文書管理コード_AfterUpdate()
'文書管理コードが入力されているかの確認
If Me.t_文書管理コード = "" Or IsNull(Me.t_文書管理コード) Then
MsgBox "文書管理コードを選択してください。" Exit Sub
End If
'Callにより採番プロシージャを呼び出す
Call 採番
'フォームの更新
Me.Requery
End Sub
同様に、「t_年度」テキストボックスに対しても更新後処理プロパティにイベントプロシージャを設定し、コーディングします。
Private Sub t_年度_AfterUpdate()
'年度が入力されているかの確認
If Me.t_年度 = "" Or IsNull(Me.t_年度) Then
MsgBox "年度を西暦で入力してください。" Exit Sub
End If
'Callにより採番プロシージャを呼び出す
Call 採番
'フォームの更新
Me.Requery
End Sub
以上で、文書管理コードあるいは年度の値を更新した都度、自動採番をして連番が取得されるようになります。
まとめ
今回は、文書管理コードあるいは年度を取得することで、当該文書番号の最新値を取得するルーチンを実装しました。途中ADO等を用いたコーディングも行いましたが、慣れればさほど難しい内容ではありませんので、ここでしっかりと使い方を学んでいただければと思います。
また、専門書を用意してそばに置いてAccessファイルの作成をしていくことで、より効率的なシステムの構築ができると思います。
スポンサーリンク
コメント