標記從 Excel 資料庫列印的記錄
問題
BarTender 只能從資料庫讀取資料,但我希望在 Excel 中標記已讀取的列。這有可能做到嗎?
解答
最好的做法是在 Excel 工作表中新增一個欄位,作為「標籤已列印」的標記。當某筆資料被用來列印標籤時,就在「標籤已列印」欄位寫入一個值,表示這筆資料已經列印過。連接 Excel 檔案時,可以使用查詢來排除那些「標籤已列印」欄位已經被設置的資料。
不過,BarTender 在資料庫連線方面是唯讀的應用程式。這表示如果要將值寫回已列印的資料庫紀錄,就需要利用 BarTender 內建的 VB Scripting 功能。以下是範例檔案:
在這個 Excel 檔案中,有兩個欄位,一個是產品名稱,另一個則用來標記該產品資料是否已經列印。
在 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;"""
'建立只包含目前列印資料的紀錄集。
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 路徑、檔名,以及你想查找和更新的欄位名稱來修改。你可以參考這個範例,應用在自己的標籤列印需求上。