昨日の「こうすればできる!!シンボルフォントの検索 」の記事で紹介したマクロに、ちょっとしたミスがありました。大変失礼しました。
毎度毎度、ミスがあるものをアップしているところを目撃されて、なんとも苦しいのですが、これもちょうどネタになるのでいいかなと思います。
まずは、ミスの対処方法の前に、「変数の宣言を強制する」という考え方と設定方法を紹介します。
<目次>
何が起こるのか?
今朝のマクロは、現状のままでも動きますが、お使いの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」とかかれていないもの、つまり、変数の宣言が強制されていないものだったので、うっかり、今回のような事態になってしまいました。
VBEに関する記事
- 【VBE】MZ-Tools 8.0 の紹介
- 【VBE】VBEとWordのウィウンドウの並べ方(試運転用)
- 【VBE】VBEとWordの表示切り替え方法
- 【VBE】[開発] タブや [Visual Basic] ツールバーを表示する
- 【VBE】コードを1行ずつ実行する「ステップイン」 [F8]、[Ctrl] + [F8]、[Shift] + [F8]
- 【VBE】コードを簡単にコメントブロックする(サイト紹介)
- 【VBE】サブルーチンへジャンプ![Shift] + [F2]
- 【VBE】プログラムの実行方法 [F5]と[F8]
- 【VBE】マクロ作成の強い味方!MZ-Tools 3.0の紹介
- 【VBE】モジュールの先頭にマクロを記載する
- 【VBE】変数の変化の様子を確認する方法
- 【VBE】変数の宣言を強制する「Option Explicit」の設定
- 【VBE】定数が自動メンバー表示される?されない?
- 【Word VBA】表の列幅を揃えるWordマクロ
- 【まとめ】VBEに関する記事一覧
- 【アプリ紹介】踊るVBE:VBEの操作を快適にする秘密兵器
- 【イベント情報】2012/01/20(日)東京 マクロ作成の試行錯誤を減らそう VBE活用セミナー
- 【セミナー案内】2015/08/02(日)Wordマクロセミナー(プログラミング編)
- 【受講報告】Excelマクロ入門講座-オブジェクト式解説編
- 【書籍紹介】Excel VBA の神様