VBA40_定義済の変数以外使えなくする方法

おはようございます Benです。プログラムの規模が大きくなるにつれて使用する変数も多くなります。そんな中、見た目がすごく似ている紛らわしい変数を取り違えることで、とんでもないバグを招くことがあり、その検出にとても労力を要することがあります。もこれで苦い思いをしたことがあるので、その事例と対策をノートします。

20160414a1.PNG
わかりやすいように端的な例を示しました。変数のD1は期間の日数を整数で扱ったもの。COはコメントで文字列型です。D12を代入、COコメントを代入してそれぞれメッセージボックスで表示させます。しかし、表示されたのは…

20160414a.PNG
このようにいずれのメッセージボックスにも値は表示されませんでした。なぜ?

20160414b.png
原因はスペルミスです。というか見た目が似ているのを間違えて入力した結果、ご覧のようにDimの定義と代入はちゃんとできていても、メッセージボックスで指定した変数が、それぞれ、1(いち)とl(エルの小文字)、O(オーの大文字)と0(ゼロ)を間違えていたため、定義も代入もしていない変数をメッセージボックスで表示させた結果、空白のメッセージボックスが表示されたわけです。これを防ぐには…

Option Explicit

Sub Main()
  Dim D1 As Integer
  Dim CO As String
  D1 = 2
  MsgBox Dl
  CO = "コメント"
  MsgBox C0
End Sub
どこが変わったか? それはモジュールの先頭にOption Explicitが増えたことです。これは定義していない変数は使えませんよ!というもので、未定義の変数が使用されたときはエラーで教えてくれます。なんか余計なお世話な気もするかもしれませんが、これがとても役に立つので、VBAではは常に使用しています。

20160414c.png
実行結果です。メッセージボックスには、定義も代入もしていないDl(ディーエル)の変数があるので、ご覧のように変数が定義されていませんのコンパイルエラーが。これで、スペルが間違えていることに気づき、バグ取りがとてもやりやすくなります。変数をしっかりと定義して、Option Explicitで管理する。面倒なようですが、これをノートしていて「回り道は実は近道だった」という優秀なお医者さんの言葉を思い出しました。

この記事へのコメント


この記事へのトラックバック