概要
- Windows環境でVBScriptを使用してQRコードを生成する方法を紹介します。
- このVBScriptは、Excelを起動し、バーコードコントロールを使ってQRコードを生成しています。
- 動作確認で使用した環境は次の通りです。
- Windows 10(64ビット)
- Microsoft Office Home and Business(Microsoft Excel 2019 MSO 64ビット)
- Microsoft Access Runtime 2016(バーコードコントロールはAccessに付属するもので、AccessまたはAccess Runtimeが必要になります。)
- Excel VBAでQRコードを作成したい場合は別のサイトをご覧ください。
- より高度なことを行う場合、開発効率が良いExcel VBAや.NET等のプログラミング言語での実装をお薦めします。
サンプルコード
サンプルコードは次の通りです。
こちらからダウンロードできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | '====================================================================== ' QRコード画像生成スクリプト ' ' - ExcelからAccessのBarcodeControlを使用してQRコードを生成します。 ' - 実行には"Microsoft Office Access"、または"Access Runtime"が必要です。 '====================================================================== ' 定数定義 ------------------------------------------------------------ 'QRコードの縦・横幅 const QR_WIDTH = 300 '画像出力時の画像サイズ調整用の比率 '(作成される画像ファイルが上記の縦・横幅と異なる場合の調整用) const SIZE_WEIGHT = 0.5 '処理途中の画像コピー&ペースト処理の失敗を抑制するための待機時間 const COPY_PASTE_INTERVAL = 1000 '[s] 'QRコード化する対象データ const ENCODE_VALUE = "https://www.yahoo.co.jp" ' メイン処理 ---------------------------------------------------------- 'Excelアプリを起動 Set App = CreateObject("Excel.Application") '作業用のブック・シートを作成 Set TargetBook = app.Workbooks.Add Set TargetSheet = TargetBook.Sheets(1) 'ワークシートにバーコードコントロールを追加 '(後のプロパティ設定でリサイズされてしまうので適当なサイズを指定) Set OleObject = TargetSheet.OLEObjects.Add( _ "BARCODE.BarCodeCtrl.1", "", 1, 0, 0, 100, 100) Set BarcodeObject = OleObject.Object 'プロパティ設定する前に非表示 '(QRコードがレンダリングされない問題の回避) BarcodeObject.Visible = False 'QRコードの設定と表示 With BarcodeObject .AutoLoad = True .Style = 11 .Substyle = 0 .Validation = 1 .LineWeight = 3 .Direction = 0 .ShowData = 1 .ForeColor = 0 .BackColor = &H00FFFFFF .Value = ENCODE_VALUE .Refresh End With OleObject.Visible = True 'QRコードをコピー WScript.Sleep COPY_PASTE_INTERVAL BarcodeObject.CopyPicture '画像をエクスポートするためのチャートを作成 '(チャートの挿入場所は適当な場所を指定) WScript.Sleep COPY_PASTE_INTERVAL TmpChartWidth = QR_WIDTH * SIZE_WEIGHT Set TmpChart = TargetSheet.ChartObjects.Add( _ 300, 0, TmpChartWidth, TmpChartWidth) 'チャートの枠線の出力を抑制 TmpChart.Chart.ChartArea.Format.Line.Visible = False 'QRコードをチャートに張り付け TmpChart.Chart.Paste 'Excel上での上記処理結果を確認したい場合は有効化 'MsgBox "pause for debugging..." 'QRコードをファイルにエクスポート ScriptPath = WScript.ScriptFullName WorkFolder = Left(ScriptPath, InStrRev(ScriptPath, "\")) '拡張子でエクスポートファイル形式を自動判別、上書き保存 TmpChart.Chart.Export WorkFolder & "qrcode-output.png" 'Excel終了(作成したブックは不要なので保存しない) TargetBook.Close False App.Quit |
- バーコードコントロールを追加し、各種プロパティを指定してQRコードを生成します。
コントロールの説明やプロパティ・メソッドは次のサイトやヘルプファイル(CHM形式)をご覧ください。 - バーコードコントロールを表示状態でプロパティを設定しても、QRコードの画像が生成されません。この状態でコピーしても、やはりQRコードの画像を取得できません。
バーコードコントロールを非表示の状態(Visible=False)でプロパティを設定する必要があるようです。(結構ハマりました…) - バーコードコントロールのQRコードを画像ファイルとして保存するためにチャート(Chart.Export)を使用しています。
- タイミング?によってコピペが失敗する場合があり、その調整を行うためにコピペ処理前後に待機時間を設けています。環境に応じてCOPY_PASTE_INTERVALの値を変更してください。
実行結果の例
前述のサンプルでファイルにエクスポートしたQRコード(300x300px)を次に示します。
(画像の切れ目が分かるよう枠線を入れていますが、画像に枠線は含まれません。)