【Excel VBA】「Microsoft BarCode Control」で作成したQRコードが更新されない場合の対処方法について

スポンサーリンク

「Microsoft BarCode Control」で作成したQRコードが更新されない現象を回避する方法について説明していきます。

発生条件

シートに配置したQRコードを図形としてコピーし、シートに張り付けると発生します。

コピー処理(CopyPicture)を実行する前に、プログラムを中断すると発生しません。

再現コード

3種類のランダムな値のQRコードを図形として貼り付けるコードです。

QRコードが更新されないため、同じQRコードが生成されます。

実行する際は、シートへオブジェクト名「BarCodeCtrl1」のQRコードを配置後、配置したシートをアクティブにした状態で実行してください。

Public Sub Test1()
    Dim sh As Worksheet: Set sh = ActiveSheet
    Dim i As Integer
    Dim shp As Shape: Set shp = sh.Shapes("BarCodeCtrl1")
    Dim pic As Picture
    Dim picTop As Double
    Application.ScreenUpdating = False
    For i = 0 To 2
        'QRコードの値変更
        sh.OLEObjects(shp.Name).Object.Value = WorksheetFunction.RandBetween(100000, 999999)
        'QRコードを図形に変換して貼り付け
        shp.CopyPicture
        sh.Cells(1, 1).PasteSpecial
        Set pic = Selection
        pic.Top = picTop
        picTop = picTop + shp.Height
    Next
    Application.ScreenUpdating = True
End Sub

回避方法

QRコードのサイズを変更すれば自動的に更新されるようです。

以下のコードは、再現コードに上記の修正を加えたコードです。

Public Sub Test2()
    Dim sh As Worksheet: Set sh = ActiveSheet
    Dim i As Integer
    Dim shp As Shape: Set shp = sh.Shapes("BarCodeCtrl1")
    Dim pic As Picture
    Dim picTop As Double
    Application.ScreenUpdating = False
    For i = 0 To 2
        'QRコードの値変更
        sh.OLEObjects(shp.Name).Object.Value = WorksheetFunction.RandBetween(100000, 999999)
        'QRコードのサイズを変更して強制更新
        shp.Width = shp.Width + 1
        shp.Width = shp.Width - 1
        'QRコードを図形に変換して貼り付け
        shp.CopyPicture
        sh.Cells(1, 1).PasteSpecial
        Set pic = Selection
        pic.Top = picTop
        picTop = picTop + shp.Height
    Next
    Application.ScreenUpdating = True
End Sub
タイトルとURLをコピーしました