AccessVBA バーコード用コードにチェックデジットを追加する NW7
スポンサーリンク
Accessレポート上で、バーコードを標準表示できますが、access2010まではチェックデジット付きのバーコードを表示することができないようです。
またNW7の場合、数字のみで構成されるコードは標準機能で表示されるものの、以下のリンク先にあるようなNW7を構成する文字列(A~C、$など)を含むコードは上手く表示できないようです。
そこで一旦チェックデジット付きのレコードを作成し、それをバーコード表示用フォントをインストールする方法で、NW7のチェックデジット付きバーコードを表示する方法を試してみました。
※フォントインストールについて
予めM_チェックデジットというテーブルを作成しておき、そのテーブルのコード列に変換対象の文字、変換数列に対応する数値を登録しておきました。
コード(列) 0...9 - $.......
変換数(列) 0...9 10 11.....
といったイメージです。
処理を2つに分けて記述しています。
以下、VBAの記述
1つ目は表示させたいバーコード用のデータからチェックデジット用の変換数を導き出します。
'--------------------------------------------------------------------------------------------
Private Sub createModulus16()
Dim db As Database
Dim rst As Recordset
Dim rst1 As Recordset
Dim i As Integer
Dim nameLen As Integer
Dim NWcode As Integer
Dim strKZcode As String
Dim cnt As Integer
Set db = CurrentDb
'表示させたいバーコードが含まれるテーブルでCD列の内容をバーコード表示させます
'チェックデジット列にチェックデジット計算用の数値を格納します
Set rst = db.OpenRecordset("テーブル1")
'チェックデジット計算用テーブル
Set rst1 = db.OpenRecordset("M_チェックデジット")
If rst.RecordCount <> 0 Then
Do Until rst.EOF
rst.Edit
’チェックデジット計算用の数値を格納する変数
NWcode = 0
nameLen = Len(rst!CD) 'CD列の文字数をカウント
’CD列の文字を走査
For i = 1 To nameLen
rst1.MoveFirst
Do Until rst1.EOF 'チェックデジット用のテーブルを走査
If Mid(rst!CD, i, 1) = rst1!コード Then 'チェックデジット用テーブルのコード列と照合
NWcode = NWcode + rst1!変換数
Exit Do 'チェックテーブルとマッチした場合Exitで抜けて次の文字照合へ
End If
rst1.MoveNext
Loop
Next i
'スタート・ストップに「a」=16を追加
rst!チェックデジット = NWcode + 32 'チェックデジット計算用の数値を一時格納
rst.Update
rst.MoveNext
Loop
End If
End Sub
'-----------------------------------------------------------------------------------------------
以下、VBAの記述
2つ目は、チェックデジット列に格納した数値を元にチェックデジット用のコードを導き出す。
'-----------------------------------------------------------------------------------------------
Private Sub createNW7digit()
Dim db As Database
Dim rst As Recordset
Dim rst1 As Recordset
Dim i As Integer
Dim NWcode As string
Dim chckdigit As Integer
Dim strdigitNum As String
Dim cnt As Integer
Set db = CurrentDb
Set rst = db.OpenRecordset("テーブル1")
Set rst1 = db.OpenRecordset("M_チェックデジット")
If rst.RecordCount <> 0 Then
Do Until rst.EOF
rst.Edit
chckdigit = 16 - rst!チェックデジット Mod 16
If chckdigit = 16 Then
strdigitNum = "0"
Else
'算出した数値をもう一度チェックデジット用テーブルと照合してコードを導き出す
rst1.MoveFirst
Do Until rst1.EOF
If chckdigit = rst1!変換数 Then
strdigitNum = rst1!コード
Exit Do 'チェックテーブルとマッチした場合Exitで抜けて次の文字照合へ
End If
rst1.MoveNext
Loop
rst!NW7code = "a" & CD & strdigitNum & "a" 'スタートストップに「a」を追加
End If
End If
rst.Update
rst.MoveNext
Loop
db.Close
Set db = Nothing
End If
End Sub
'-----------------------------------------------------------------------------------------
以上、VBAの記述終わり。