none
Option Explicit 宣言しているにも関わらず未定義の変数が使用出来てしまう RRS feed

  • 質問

  • 過去に類似事象の質問が上がっておりましたが、状況再現不可ということでクローズされてしまっていたため、再度質問させていただきます。
    類似質問

    ttps://social.msdn.microsoft.com/Forums/ja-JP/62aa835c-346b-48a5-a3e1-76ce606e98f5/vba-?forum=vbajp

    Windows7 ExcelVBA(Office2007SP3)で作成したVBAマクロが、「Option Explicit」を宣言しているにもかかわらず、
    宣言していない変数がそのまま実行されてしまう事象が発生しております。

    細かい状況ですが、
    「Option Explicit」を宣言してVBAマクロを作成。(全モジュールに宣言されていることを確認)
    VBAマクロに機能の追加が発生し、その際未宣言変数が混入。
    その後そのままVBAマクロを使用し続けているという状況。

    Office2007のEOLが近いため、Office2016への移行検証の際にコンパイルエラーが発生し今回の事象が見つかった次第です。

    その他試してみたこととして、「Option Explicit」を削除しブックを保存、
    一度ブックを閉じた後に「Option Explicit」を再宣言してマクロを実行すると未宣言変数にてコンパイルエラーが発生しております。

    上記の通り、Excel2007で何故エラーにならないかの原因が分からず今回の質問になります。

    こちらのコミュニティにおいて Option Explicitが効かない事例等の報告が無いか、
    当事象の原因等の情報がございましたらご教示下さい。

    2017年1月30日 5:00

回答

  • 回答でないのですが、

    本件ですが、私も数回遭遇した経験があります。おそらく不具合があるのではないかと思います。

    ただ、再現性がつかめていないのと、ご質問の中で触れられていますが、一度すべての「Option Explicit」を削除して、コンパイルしてから(あるいはファイルを開きなおし)、再度「Option Explicit」を再宣言しコンパイルを通すと、未宣言変数のエラーが検出できます。(←運用面でこの方法でカバーしていくしかない?)

    また、Excel 2007の固有の問題ではなく、Excel 2016でも再現したことがあります。

    原因はわからないのですが、個人的な想像ですが、おそらくマクロをコンパイルしたときに何らかのキャッシュが残っていて、そのキャッシュと新規コードとのマージの部分で何か不具合が起こっているのではないかと思っております。

    • 回答としてマーク ken05_27 2017年2月13日 11:12
    2017年2月11日 1:55

すべての返信

  • 回答でないのですが、

    本件ですが、私も数回遭遇した経験があります。おそらく不具合があるのではないかと思います。

    ただ、再現性がつかめていないのと、ご質問の中で触れられていますが、一度すべての「Option Explicit」を削除して、コンパイルしてから(あるいはファイルを開きなおし)、再度「Option Explicit」を再宣言しコンパイルを通すと、未宣言変数のエラーが検出できます。(←運用面でこの方法でカバーしていくしかない?)

    また、Excel 2007の固有の問題ではなく、Excel 2016でも再現したことがあります。

    原因はわからないのですが、個人的な想像ですが、おそらくマクロをコンパイルしたときに何らかのキャッシュが残っていて、そのキャッシュと新規コードとのマージの部分で何か不具合が起こっているのではないかと思っております。

    • 回答としてマーク ken05_27 2017年2月13日 11:12
    2017年2月11日 1:55
  • 返信ありがとうございます。

    本件のような事例が見当たらず、原因報告を求められ困っておりました。

    Excel2016への移行検証で出るべきエラーがちゃんと出たという点からすれば、正しい結果を返していますのでその方向でユーザに話をしてみます。

    原因がはっきりしないことと、これ以上情報が無さそうなのでクローズします。

    ありがとうございました。

    2017年2月13日 11:12
  • 本件のような事例が見当たらず、原因報告を求められ困っておりました。

    可能性があるとすれば、プレミアサポートといった上位の有償サポートぐらいでしょうか。
    そこまで費用をかけるほどの必要性がないのであれば、見送りで良いかと思いますが…。
    2017年2月13日 12:02