こんにちは、Ryoです。
これまでGoogleAPIやAccessコントロールによるQRコード生成を紹介してきましたが、TEPRA(PRO)のSR750でもQRコードを作ることができ、カタカナや漢字もOKです。APIやサンプルプログラムはKING JIMの公式HPで提供されていますので、これらの活用手順などについて書いていきたいと思います。
公式HPにマニュアルなどもあるのですが、VBAをあまり触ったことが無い場合、なかなか敷居が高いように感じますし、KING JIMではプログラミングに関するアドバイスなどはサポート対象外で、問い合わせについても一切引き受けませんとなってますので、記事で解説することで少しでも助けになればと思います。
1.準備
先ずテプラ本体ですが、本記事ではキングジム ラベルライター「テプラ」PRO SR750を使用しています。
次に印刷ラベルイメージを編集するソフト「SPC10」が必要になりますが、これは公式HPのこちらで提供されていますので、ダウンロード&インストール必須です。
インストール手順などは割愛しますが、唯一気にしておく点としては、処理中にテプラ本体との接続を促されたような気がしますので、準備しておくぐらいですね。
同様に公式HPSPC10をダウンロードしたページ内で提供されているサンプルプログラムもダウンロードしておいてください。

念の為にPCとテプラ本体の接続方法を説明しますと、本体購入時に付属しているUSBケーブルで接続し、本体の「シフト」キーを押しながら「ホーム」ボタンを押せば、「PC通信可能」と液晶画面に表示されますので、それでOKです。


後はデスクトップなどに新規フォルダを作成して適当なフォルダ名を付けておいてください。本サンプルではフォルダ名を「Tepra_Sample」としています。

2.サンプル概要
サンプルについてもKING JIMから提供されているものをベースに説明していきたいと思いますが、ラベル仕様は以下画像のように変えています。

このラベルをスマホアプリなどで読み取ると「ABC0123,ハウジング,2018/4/20,生産管理」と表示されます。
ラベルの仕様はそのままでも良かったのですが、私が使う上でラベル自体を極力シンプルにして、QRコード内に必要な情報を入れる形にしたかったので変えています。
また、Excel側についてはVBA記述を少し変更しますが、概ねそのまま使用します。サンプル例に合わせて表のタイトル等を変更したものが、こちらになります。

ほぼ一緒ですね(笑)
この表内にあるチェックボックスをON=印刷対象となっていますので、必要な情報を入力しチェックを入れれば「管理ID」「製品名」「実施日」「管理部門」がQRコード化される形になります。
3.ラベルの作成
ラベルを作成する為には、先程公式HPからダウンロード⇒インストールした「SPC10」を起動します。その際にテプラ本体とPCは接続して「PC通信可能」としておきます。
立ち上げると以下画像の画面が中央に表示されますので、使用するテープ幅を選択します。(本サンプルではテープ幅12mm)

次に画面内にある流し込み印刷を選択してOKを押し、次画面の「流し込みデータ新規作成」を選択します。


その後以下画面になりますので、これからラベル用のレイアウトなどを作成していきます。

SPC10の作業画面は左側が「レイアウト」、右側が「データ」になっており、データ欄は下の画像のようなExcel風の表示がされています。

このデータ欄の列A,B,C・・・表記の中にある「T」の部分は「列属性」といって、この欄の入力されるデータが何か(テキストorQRコードなど)を表します。
「T」の部分を右クリックすると「列属性」が表示されますので、A~Dを「T=テキスト」、Eを「バーコード⇒QRコード」とします。

QRコードを選択すると「T」がバーコードイメージに変わります。

次にテープ長と余白の設定ですが、本サンプルではテープ長「30mm」、余白「1mm」としています。

設定が終わったら、先ずはラベルに表示するテキストデータなどを作成していきます。
ラベルに表示する「サンプルID-」はテキストを挿入しますので、以下画像の通り「A文字」、フォントサイズを「8」としてラベル内に記載します。


「サンプルID-」の文字に続くIDデータはA列を使用しますので、A列の「T」アイコンをドラッグ&ドロップし「-」の後に続ける形で位置とサイズを調整します。(フォントサイズを9とします)

ここまでのレイアウトで表示イメージを確認する為、データ欄のA~D列に以下のテキストを入力すると画像のようになります。
A列 ⇒ ABCD0123
B列 ⇒ ハウジング
C列 ⇒ 2018/4/20
D列 ⇒ 生産管理
E列 ⇒ ABC0123,ハウジング,2018/04/20、生産管理


肝心なQRコードはE列のバーコードイメージアイコンをラベル左側にドラッグ&ドロップし、大きさなどを整えます。

画像のような形になっていればラベル編集はOKなので、ファイル名を「QR_Sample.tpe」として最初に作成したフォルダ「Tepra_Sample」内に保存しておきます。
4.サンプルコード
本サンプルは上述の通り、公式HPからダウンロードしたサンプルをベースとして一部変更し流用しています。
ダウンロードしたサンプルプログラムファイルを開くとフォルダ内は以下のようになっていますが、この内「bihin.xlsm」を使用します。

「bihin.xlsm」を開き、Sheetを以下の様に変更します。

次に「開発」タブの「デザインモード」にします。

Sheet内にある「印刷」ボタンを右クリックし「コードを表示」を選択することで、サンプルプログラムが表示されます。

編集する必要があるプログラムはSheetモジュール(Sheet1)に記述されており、今回はその「Private Sub cmdPrint_Click()」の中の記述を一部変更します。
先ず、変更を含めたコード全文は以下の通りです。
'==============================================================================
' CSVファイルを作成し、印刷実行関数を呼び出す
'==============================================================================
' 備品管理ラベル印刷 サンプルプログラム for SPC10-API
' Copyright 2014 KING JIM CO.,LTD.
Private Sub cmdPrint_Click()
Dim strExePathName As String
Dim strTextPathName As String
Dim strCsvPathName As String
Dim strPrintLogPathName As String
Dim strTpePathName As String
Dim strOption As String
Dim dblRetValue As Double
'-----------------------------------------------------------------------------
' SPC10のEXEファイルをパス付きで指定する
'-----------------------------------------------------------------------------
If IsWow64() Then
' OSが64ビット環境
strExePathName = "C:\Program Files (x86)\KING JIM\TEPRA SPC10\SPC10.exe"
Else
' OSが32ビット環境
strExePathName = "C:\Program Files\KING JIM\TEPRA SPC10\SPC10.exe"
End If
'-----------------------------------------------------------------------------
' テープ幅の出力ファイル、CSVファイル、印刷結果ファイル、TPEファイルの指定
'-----------------------------------------------------------------------------
' テープ幅の出力ファイルを指定する
strTextPathName = ThisWorkbook.Path & "\" & "TapeWidth.txt"
' CSVファイルを指定する
strCsvPathName = ThisWorkbook.Path & "\" & "data.csv"
' 印刷結果ファイルを指定する
strPrintLogPathName = ThisWorkbook.Path & "\" & "PrintResult.txt"
'↓↓変更箇所(作成したtpeファイルを指定する)↓↓
' TPEファイルを指定する
strTpePathName = ThisWorkbook.Path & "\QR_Sample.tpe"
'-----------------------------------------------------------------------------
' 設定情報の取得
'-----------------------------------------------------------------------------
' ハーフカット設定
Dim blnHalfcut As Boolean
If OptionButton1.Value = True Then
blnHalfcut = True
ElseIf OptionButton2.Value = True Then
blnHalfcut = False
End If
' テープ幅確認メッセージ設定
Dim blnConfirmTapeWidth As Boolean
If chkTapeWidth.Value = True Then
blnConfirmTapeWidth = True
Else
blnConfirmTapeWidth = False
End If
' 印刷結果をファイルに出力する設定
Dim strPrintLog As String
If chkPrintLog.Value = True Then
strPrintLog = strPrintLogPathName
Else
strPrintLog = ""
End If
'-----------------------------------------------------------------------------
' 印刷対象の確認
'-----------------------------------------------------------------------------
If (getPrintJobCount() = 0) Then
MsgBox ERROR_MESSAGE_NO_PRINT_JOB
Exit Sub
End If
'-----------------------------------------------------------------------------
' テープ幅のファイル出力関数の呼び出し
'-----------------------------------------------------------------------------
strOption = createPrintOption(strTpePathName, strCsvPathName, 1, blnHalfcut, _
blnConfirmTapeWidth, strPrintLog, strTextPathName)
dblRetValue = PrtSpc10Api(strExePathName, strOption, "")
If (dblRetValue = 0) Then
' API実行エラー
MsgBox ERROR_MESSAGE_RUN_PRINT
Exit Sub
End If
'-----------------------------------------------------------------------------
' テープ幅の出力ファイルの存在確認
'-----------------------------------------------------------------------------
If Dir(strTextPathName) = "" Then
' テープ幅の出力ファイルが存在しない場合
MsgBox ERROR_MESSAGE_GET_TAPE_WIDTH
Exit Sub
End If
'-----------------------------------------------------------------------------
' TPEファイルの存在確認
'-----------------------------------------------------------------------------
Dim strTapeWidth As String
Dim strTapeType As String
' テープ幅の出力ファイルからテープ幅(テープ種類)を取得
strTapeType = ""
strTapeWidth = getTapeWidth(strTextPathName, strTapeType)
' テープ幅の確認
If StrComp(strTapeWidth, "0") = 0 Then
' テープ未装着の場合
Exit Sub
End If
' テープ種類の確認
If StrComp(strTapeType, "0x00") Then
' Standard type以外の場合
MsgBox ERROR_MESSAGE_TPE_FILE_NOT_FOUND
Exit Sub
End If
'↓↓変更箇所(使用しないのでコメント化)↓↓
' TPEファイルを指定
'strTpePathName = ThisWorkbook.Path & "\bihin_" & strTapeWidth & ".tpe"
If Dir(strTpePathName) = "" Then
' TPEファイルが存在しない場合
MsgBox ERROR_MESSAGE_TPE_FILE_NOT_FOUND
Exit Sub
End If
'-----------------------------------------------------------------------------
' CSVファイルの作成
'-----------------------------------------------------------------------------
Dim csvStr1 As String
Dim csvStr2 As String
Dim csvStr3 As String
Dim csvStr4 As String
Dim csvQrStr As String ' QRコード
Dim csvStrAll As String ' 結合用
'↓↓変更箇所↓↓
'Dim strCompanyName As String ' 会社名
Dim i As Integer
Dim chkValue(MAX_LINE_COUNT)
Dim fileNo As Integer
On Error Resume Next
' 初期値設定
fileNo = FreeFile
'↓↓変更箇所(会社名は使用しない)↓↓
' 会社名
'strCompanyName = Range("E2").Value
Open strCsvPathName For Output As #fileNo
For i = 1 To MAX_LINE_COUNT
chkValue(i) = ActiveSheet.OLEObjects("CheckBox" & i).Object.Value
If chkValue(i) Then
' チェックがされている場合
csvStr1 = Range("B" & (i + LINE_OFFSET)).Value
csvStr2 = Range("C" & (i + LINE_OFFSET)).Value
csvStr3 = Range("D" & (i + LINE_OFFSET)).Value
csvStr4 = Range("E" & (i + LINE_OFFSET)).Value
' データの存在確認
If (Len(csvStr1) = 0 And Len(csvStr2) = 0 And Len(csvStr3) = 0 _
And Len(csvStr4) = 0) Then
' 空データの行は、チェックされていても無視する
Else
' QRコード用文字列
csvQrStr = Chr(34) & _
csvStr1 & "," & _
csvStr2 & "," & _
csvStr3 & "," & _
csvStr4 & _
Chr(34)
' 統合
'↓↓変更箇所(会社名strCompanyNamed削除)↓↓
csvStrAll = csvStr1 & "," & _
csvStr2 & "," & _
csvStr3 & "," & _
csvStr4 & "," & _
csvQrStr
' CSVファイル出力
Print #fileNo, csvStrAll
End If
End If
Next i
Close #fileNo
'-----------------------------------------------------------------------------
' 印刷関数の呼び出し
'-----------------------------------------------------------------------------
' 印刷実行
strOption = createPrintOption(strTpePathName, strCsvPathName, _
1, blnHalfcut, blnConfirmTapeWidth, strPrintLog, "")
dblRetValue = PrtSpc10Api(strExePathName, strOption, "")
If (dblRetValue = 0) Then
' API実行エラー
MsgBox ERROR_MESSAGE_RUN_PRINT
End If
End Sub
◆変更箇所
≪箇所①≫
先程作成したラベルを使用しますので、コード内のTPEファイル指定を変更します。
‘—————————————————————————–
‘ テープ幅の出力ファイル、CSVファイル、印刷結果ファイル、TPEファイルの指定
‘—————————————————————————–
‘ テープ幅の出力ファイルを指定する
strTextPathName = ThisWorkbook.Path & “\” & “TapeWidth.txt”
‘ CSVファイルを指定する
strCsvPathName = ThisWorkbook.Path & “\” & “data.csv”
‘ 印刷結果ファイルを指定する
strPrintLogPathName = ThisWorkbook.Path & “\” & “PrintResult.txt”
‘↓↓変更箇所(作成したtpeファイルを指定する)↓↓
‘ TPEファイルを指定する
strTpePathName = ThisWorkbook.Path & “\QR_Sample.tpe”
≪箇所②≫
次にコード内で再度TPEファイル指定の記述がありますが、ここは不要なのでコメント化しています。
‘ TPEファイルを指定
‘strTpePathName = ThisWorkbook.Path & “\bihin_” & strTapeWidth & “.tpe”
≪箇所③≫
csvファイルの作成を行う記述部分のstrCompanyNameは使用しませんので、コメント化します。
‘—————————————————————————–
‘ CSVファイルの作成
‘—————————————————————————–
Dim csvStr1 As String
Dim csvStr2 As String
Dim csvStr3 As String
Dim csvStr4 As String
Dim csvQrStr As String ‘ QRコード
Dim csvStrAll As String ‘ 結合用
‘↓↓変更箇所↓↓
‘Dim strCompanyName As String ‘ 会社名
Dim i As Integer
Dim chkValue(MAX_LINE_COUNT)
Dim fileNo As Integer
On Error Resume Next
‘ 初期値設定
fileNo = FreeFile
‘↓↓変更箇所(会社名は使用しない)↓↓
‘ 会社名
‘strCompanyName = Range(“E2”).Value
≪箇所④≫
後はQRコード化する文字結合の記述部分で不要となったstrCompanyNameを修正します。
‘ 統合
‘↓↓変更箇所(会社名strCompanyNamed削除)↓↓
csvStrAll = csvStr1 & “,” & _
csvStr2 & “,” & _
csvStr3 & “,” & _
csvStr4 & “,” & _
csvQrStr
以上の修正でコード部分は完了です。本記事のサンプルでは他のコード部分は特に修正など必要ありません。
ちなみにQRコード化する文字を指定している部分がここです。
' QRコード用文字列
csvQrStr = Chr(34) & _
csvStr1 & "," & _
csvStr2 & "," & _
csvStr3 & "," & _
csvStr4 & _
Chr(34)
Sheet内に書込まれたた管理IDなどを文字列結合しています。また、テプラに出力する際にcsvファイルを生成していますが、その処理は上に書いているcsvStrAllの部分です。
Sheetから「印刷」ボタンを押して起動すると、デスクトップ上に作成したフォルダ内にData.csvというファイルが出来ていると思います。
このファイルを開くと以下画像の通りになっていますが、それぞれA~E列がSPC10でラベル作成した際のデータ欄A~Eに対応していますので、E列にQRコード化したい文字連結データがあります。

csvファイルのデータがSPC10ソフトに流れていき、設定したレイアウトでそれぞれテキストやQRコード化されて印刷されます。特に問題なければSheet上の「印刷」ボタンを押すことでQR付のラベルがテプラから出てくると思います。
私がスマホのアプリで読んでも表示されますので、精度的にも大丈夫ですね。
5.まとめ
テプラ製作元から提供されているソフトとサンプルプログラムで問題なくQRコードを作ることができますので、自身のイメージに合わせてSheetやラベルイメージを変更していけば柔軟に活用できると思います。
個人的には最初ややわかりにくかったりしたのもあり、備忘録としても残す意味で今回書いています。流れを理解してしまえば、それほど難しくありませんので機会ありましたらご検討くださいませ!
以上、テプラSR750でQRコードを生成する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo











