昨日の「こうすればできる!!シンボルフォントの検索 」の記事で紹介したマクロに、ちょっとしたミスがありました。大変失礼しました。
毎度毎度、ミスがあるものをアップしているところを目撃されて、なんとも苦しいのですが、これもちょうどネタになるのでいいかなと思います。
まずは、ミスの対処方法の前に、「変数の宣言を強制する」という考え方と設定方法を紹介します。
<目次>
何が起こるのか?
今朝のマクロは、現状のままでも動きますが、お使いのVBE(Visual Basic Editor)の設定で、「変数の宣言が強制されている場合」に、以下のエラーが出てしまいます。
なぜなら、今朝紹介したマクロでは、宣言せずに使っている変数があるのです。
変数を宣言する利点
変数を定義する、というのは、プログラム中で使われている変数がどのような種類のものかをあらかじめ決めておく、ということです。
変数を宣言すると、マクロのミスを防ぎやすくなります。
どうして、ミスを防げるのか?
①無駄なメモリの使用を防ぐことができる →メモリ不足でマクロが止まることを回避
とはいっても、そんな複雑なマクロはあんまり組めませんが。
どうして、メモリの消費を抑えられるか?ということなんですが、変数の種類を宣言しない場合には、パソコンが勝手に、保守的な(かなり大げさな)メモリーを割り当てるんですね。念のため、というか。
具体的には、Variantと呼ばれる、とてつもなく大きな数字(1.8E308って大きさわかります?)も扱える変数の種類があるのですが、これが用いられます。
なので、細かく設定している場合に比べて数倍のメモリーが使われてしまうことになります。
②スペルミスをした変数が生き残ってしまう
変数の宣言を強制すると、自分のミスに気がつくことができます。
たとえば、宣言した変数名をスペルミスをした場合に、そのスペルミス変数は機能しないからです(上記のような「変数が定義されていません」というメッセージが表示されます)。
でも、変数の宣言が強制されていないと、ミスに気がつけません。
なぜなら、スペルミスをした変数も、別の新しいVariant型の変数として認識されてしまうからです。
たとえば、myFileNameに文書のファイル名を入れて処理をするプログラム中に、myFilesNameと書き間違えた変数をプログラムに書いたとしますね。
そうすると、このmyFilesNameには、何も代入されていませんから、空っぽです。
それまでにファイル名を代入したmyFileNameを置き去りにして、この空のmyFilesNameでファイルを開こうとしてもエラーが発生するだけですね。
ありがちです。
こうすると、自分がしてしまったエラーが特定できなくて、デバッグにやたら時間がかかるなんてことにもなりかねないですね。
よって、みなさんのパソコンもぜひ、変数の宣言をしてください。
変数の宣言を強制する方法
この説明は、「Wordで実践」のP.14~16に記載されています。
VBEを開いたら、メニューの[ツール(T)] > [オプション(O)....]から開いてください。
画面中の上方にある、コードの設定の「変数の宣言を強制する(R)」のチェックボックスを有効にします。
すると、以後、新しいモジュールを開くたびに、ページの先頭に以下のように「Option Explicit」と表示されます。
現在すでに作られているモジュールには、ご自身で、「Option Explicit」と記入してください。
私は、上記の設定をしたのですが、以前作成したモジュールには、「Option Explicit」と自分で記入してありませんでした。
今回紹介したマクロは、「Option Explicit」とかかれていないもの、つまり、変数の宣言が強制されていないものだったので、うっかり、今回のような事態になってしまいました。