AccessVBAメモ

AccessVBAで作ったサンプルコード集

AccessVBA バーコード用コードにチェックデジットを追加する NW7

スポンサーリンク

Accessレポート上で、バーコードを標準表示できますが、access2010まではチェックデジット付きのバーコードを表示することができないようです。

またNW7の場合、数字のみで構成されるコードは標準機能で表示されるものの、以下のリンク先にあるようなNW7を構成する文字列(A~C、$など)を含むコードは上手く表示できないようです。

 

www.kabukoba.co.jp

 

そこで一旦チェックデジット付きのレコードを作成し、それをバーコード表示用フォントをインストールする方法で、NW7のチェックデジット付きバーコードを表示する方法を試してみました。

※フォントインストールについて

www.technical.jp

 

予め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の記述終わり。