次の方法で共有


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

質問

2017年1月30日月曜日 5:00

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

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が効かない事例等の報告が無いか、
当事象の原因等の情報がございましたらご教示下さい。

すべての返信 (3)

2017年2月11日土曜日 1:55 ✅回答済み

回答でないのですが、

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

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

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

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


2017年2月13日月曜日 11:12

返信ありがとうございます。

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

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

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

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


2017年2月13日月曜日 12:02

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

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