none
Microsoft BarCode Control 16.0 と Public変数について RRS feed

  • 質問

  • Excel(office365)の中でMicrosoft BarCode Control 16.0を使ってQRコードを作成し、プロシージャ終了した後、Public変数がクリアされました。Microsoft BarCode Control 16.0を使わない(作成処理をコメントアウト)場合、Public変数が問題なく保持できます。

    'QRコードの作成
    Set xObjOLE = ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", Width:=100, Height:=100)
    xObjOLE.Object.Style = 11          'QRコードを指定
    xObjOLE.Object.Value = xSRg.Text   'QRコード値を設定
    xObjOLE.Object.Validation = 2      'QRコード訂正レベルQ
            
    '作成したQRコードをファイル"A2"セルに張り付け
    ActiveSheet.Shapes.Item(xObjOLE.Name).Cut
    ActiveSheet.Paste shtHN.Range("A2")

    解決方法がご存知でしたら、ぜひ教えてください。

    よろしくお願いいたします。


    • 編集済み DAISH01 2019年3月18日 2:22
    2019年3月18日 2:20

すべての返信

  • DASH01さん こんにちは、解決されていると思いますが、上がってきておりましたので、Public変数の情報を返信します。

    過去のサポートに記載があったものです。http://support.microsoft.com/kb/408871/ja は消えていますが
    同様の内容が [VBA] Public 宣言された変数の有効期間 にあります。
    -以下抜粋-
    ほとんどの場合、プロシージャ終了後も値は保持されますが、意図しないタイミングで保持されていた Public 変数の値が破棄され、使えていた変数の値が突然使えなくなる場合があります。 そのため、Public 変数がアプリケーション終了時まで有効であることを期待する VBA マクロの実装は、推奨されません。

    なお、モジュールの編集、
    プロジェクトの構造の変更、
    コンパイルエラーの発生、
    参照設定の変更、
    デザインモードへの切り替え、
    コントロールを削除して [元に戻す] を実行する
    などのタイミングで変数が破棄される場合があります。これは、そのタイミングでメモリ上に確保されている VBA の情報が破棄され、初期化を行ってから、その後の処理が実行されるためです。

    情報は古いものですが、Microsoft BarCode Control 16.0(ActiveX コントロールで上記に該当する
    処理などが実行されている場合、仕様と言う事に・・・

    追記:代替え案、対策、力業になるかもしれませんが、メインの処理などに影響しないシートセルに
    一時的に値を保持する。または、セルの値を代用する。



    • 編集済み Takumi_Q 2019年6月9日 2:40 追記を加筆
    2019年6月7日 4:10