ホーム > デバッグ > Lesson1: バグ対策

バグ対策
バク対策 バク対策 変数の宣言を強制する
バグとは「虫」のこと。
プログラムでは、誤りのことをバグ(害虫)といいます。
プログラムが勝手に誤動作することはありません。ただ指示されたとおりに動いているだけ。
ということは、その指示が間違っているということ。
バクのないプログラムを作りたいですが、これは難しい。
なので、バクが出にくい、出ても見つけやすいようになるための対策をとります。
 
[変数の宣言を強制する]
VBEのメニューの[ツール]、[オプション]を選び
変数の宣言を強制するにチェックを入れる
変数の宣言を強制する
新規モジュール作成時に
Option Explicit

というステートメントが自動的にモジュールの先頭に挿入されます。
Dim などを使って宣言されていない変数が使えなくなります。
必ず宣言しなければなりません。
これはタイプミスを防ぐためです。
例えばこのプログラム。
Sub test_16()
  
  'バク対策の勉強中
  
  Dim moji As String
  
  mozi = "a" + "b"
  MsgBox (moji)
  
End Sub

エラーはでませんが、タイプミスをしているため正しい結果が出ません。
(moji を mozi と間違ってます。)
Option Explicit があるとエラーメッセージが表示されます。
エラーメッセージ
そして、どこが間違っているかがわかります。
バグのあるところ
2004年8月
バク対策 バク対策 エラートラップ
こんなプログラムを作ってみました。
プログラム1
プログラム2
UserForm1を開く() を実行すると、ユーザーフォームを開くというもの。
そしてそのユーザーフォームを開くとき実行されるのが、UserForm_Initialize()
ここで一つ実行時エラーがあります。0で割り算しているところです。
UserForm1を開く() を実行してみます。すると
エラー発生
エラーメッセージが出ました。どこが悪いのか調べるために「デバッグ」をクリック。
エラー箇所?
ここがダメとでました。ここ? ここじゃわからない。
そこで...

VBEのメニューの[ツール]、[オプション]を選び[全般]をクリック。
エラートラップの[クラスモジュールで中断]を選択する。
クラスモジュールで中断
そして、同じようにもう一回 UserForm1を開く() を実行すると
また同じエラーメッセージが出てくる。デバックをクリックすると今度は
エラー箇所?
ここが悪いと教えてくれた。
ケースバイケースらしいのですが、とりあえずこの設定がいいのではないかと...
2007年11月