「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