Excelデータベースから印刷されたレコードに印刷済みマークを付ける方法
質問
BarTenderはデータベースからの読み取りのみが可能ですが、印刷が完了したらExcelの行に既読マークを付けたいです。これは可能でしょうか?
回答
この場合、Excelワークシートに「ラベル印刷済み」フラグとして機能する追加のフィールドを作成するのが最適です。レコードを使ってラベルを印刷した際に、「ラベル印刷済み」フィールドに値を書き込み、印刷済みであることを示します。Excelファイルに接続する際にクエリを使い、「ラベル印刷済み」フィールドが設定されていないレコードだけを抽出することができます。
残念ながら、BarTenderはデータベース接続に関しては読み取り専用のアプリケーションです。そのため、印刷したデータベースレコードに値を書き戻すには、BarTenderの組み込みVBスクリプト機能を利用する必要があります。以下にサンプルファイルを用意しました:
Excelファイルには、商品名用のフィールドと、その商品のレコードが印刷されたかどうかを示すフラグ用のフィールドの2つがあります。
BarTenderのラベルフォーマットでは、Excelファイルへの接続を設定しており、「C:\Seagull」フォルダ内にファイルがあることを前提としています。クエリを使って、「Printed」列に「YES」と記載されていない商品(レコード)のみを抽出し、印刷対象としています。印刷時にレコードを選択できるオプションも有効にしているため、まだ印刷されていないレコードの中から印刷するものを選ぶことができます。
印刷ジョブ中、ラベル外に赤色で配置されたオブジェクト内のVBスクリプトが実行され、Excelファイルに接続し、印刷中のレコードを見つけて「Printed」フィールドに「YES」と記入します。これにより、次回印刷時にはそのレコードが選択肢に表示されなくなります。VBスクリプトは以下の通りです。
OnNewRecord イベント
'オブジェクト名を定義します。
dim objConn
dim strConn
dim rs
'データベース接続パラメータの定数を定義します。
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001
'Excelファイルに接続します。
Set objConn = CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Seagull\Fruits.xls';Extended Properties=""Excel 8.0;HDR=YES;"""
'現在印刷中のレコード1件のレコードセットを作成します。
Set rs = CreateObject("ADODB.Recordset")
rs.open "SELECT * FROM [Sheet1$]", objConn, adOpenStatic, adLockOptimistic, adCmdText
rs.Find "Product = '" & Field("Sheet1$.Product") & "'"
'レコードの「Printed」フィールドを「YES」に設定し、印刷済みであることを示します。
rs.Fields("Printed") = "YES"
rs.Update
太字で示した部分は、ご自身のExcelファイルのパスやファイル名、検索・更新したいフィールド名に合わせて変更できます。この例を参考に、ご自身のラベル印刷の運用に応用してください。