2022年5月10日火曜日

VBAでバーコードの出力はコードを組んだことがあるけれど、このコードまで手を伸ばしたことはなかったのだ ー Microsoft BarCode Control 15.0以降(VBA)

      
製品の出荷伝票に、QRコードを印字する依頼を受けましたが、かなり難しい。
というのも、A4用紙三枚組のタックシールに同じコードを貼らねばならない。

コード自体は、誰がオリジナルを作ったのか知りませんが、定番はあるようだ。
ただ、QRコード作成は一つで、それをセルに張り付けるシンプルなロジック。

そのコードを失敬して、新たにブックを開いてシートを二つ作ることにします。
ブックでは、先ずデータの書込みと印刷するシートに分けてデータを読み込み。

これは、CSVファイルなので、”Line Input #”の構文から読みだして書き込み。
そこにはQRコードのデータ列があり、このデータをQR生成に使うわけですな。

一方、生成コードのプロシージャをモジュールに貼り付けましたが問題が出た。
それは生成データの指定を、”xOleObjct.Object.Value = 変数”にすると失敗。

最初のサンプル構文では、”123456789”のように「“」の引用符で囲んだものね。
普通なら、これを変数に置き換えてもよさそうですが、何か扱いが違うようだ。

結局、引用符で囲んだ部分まで表現できる変数のコードを付加してまずは解決。
次に、内容は同じでも三つQRコードを張り付得る処理は、手軽なループ処理。

ただし、後で削除が簡単にできるように、各々オブジェクトにIDを割り振った。
こうして、プロシージャが出来上がりましたが、削除するコードも必要で作成。

というわけで、参考になればよいのですが、QRコードに全角字は組み込めない。
QRコードは、2013以降のオフィスであれば作成できるのですが、全角字の対応はしていないという制約があり、どうしても組み込みたいのなら、アドインソフトでも購入するしかないなと思うのでした。

<参考コード>
Sub CreateQRCode()  'アクティブシートにQRコード生成・貼り付け
Dim ws As Worksheet, xOleObjct As OLEObject
Dim TopPosition As Double, LeftPosition As Double
Dim j As Long, k As Long, Str As String
  Str = "" '引用符込みのQRデータを変数で作成
   Str = Str & WorkSheets("Sheet2").Range("A1").Value 'セル値(QRデータ)
    Str = Str & ""
 For k = 1 To 3  'QRコード三個作成なので、ループは三回
  Set ws = Worksheets("Sheet1")   'QRコード作成のシート指定
  Set xOleObjct = ws.OLEObjects.Add("BARCODE.BarCodeCtrl.1")
   'OLEObjectオブジェクト作成
    With xOleObjct.Object  'OLEObjectオブジェクトをQRコード化
        .Style = 11 'QRコード(=11)を指定
        .Value = Str    'データを指定
    End With
      If k = 1 Then j = 1 'QRコード貼り付け行番号取得
        If k = 2 Then j = 4
           If k = 3 Then j = 7
    With ws.Range("A" & j)    'QRコードを表示させるセル位置を取得
        TopPosition = .Top + 2 'セル枠に罫線があるれば、+1~2を足しずらす
        LeftPosition = .Left + 2
    End With
      With xOleObjct   'QRコードのサイズ、位置、名前を指定
        .Height = 38   '縦と横のサイズ(単位不明、手動で調整する)
        .Width = 38
        .Top = TopPosition '貼り付け位置は左上部
        .Left = LeftPosition
          If k = 1 Then .Name = "QRcode1"   'IDを割り振る
            If k = 2 Then .Name = "QRcode2"
              If k = 3 Then .Name = "QRcode3"
    End With
       Set xOleObjct = Nothing      '後片付け
Next k
End Sub

Sub QRcodeDelete() 'アクティブシートを指定しQRコード削除
 Worksheets("Sheet1").Activate
  ActiveSheet.OLEObjects.Delete
End Sub



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿