★エラー処理について
 

 さてこの章の最後はエラーが発生した時の回避方法について簡単に解説したいと思います。
まずは、現在のコードをもう一度見てみましょう。
この中に出てくる「数値の変数」という変数のデータ型は数値ですとはっきり書かれていますので、もし数値以外のものが入ってくるとエラーになってしまいます。

Private Sub テキスト数量_AfterUpdate()
Dim 数値の変数 As Long

   テキスト合計 = テキスト単価 * テキスト数量

'シート上のセルへ数量と合計を転記します。
   数値の変数 = テキスト数量
   ActiveCell = 数値の変数
   数値の変数 = テキスト合計
   ActiveCell.Offset(, 1) = 数値の変数

End Sub

 例えば数字を入れるつもりが「w」って文字を入れてしまってEnterキーを押してしまったり、入れた文字を消して空白のままEnterキーを押したりするといずれも数値ではないのでエラーになってしまいます。



こんなエラーメッセージが出てくるんです。
「デバッグ」?なんですか?

とりあえず「終了」を押しましょう。
このエラーメッセージは、データ型が違いますということなので、それを解決しないとこのエラーメッセージがしばしば現れることになります。ではその回避方法を見ていきましょう。
私は回避コードを次のようにしました。
Private Sub テキスト数量_AfterUpdate()
Dim 数値の変数 As Long

On Error GoTo
エラー処理へ

   テキスト合計 = テキスト単価 * テキスト数量

'シート上のセルへ数量と合計を転記します。
   数値の変数 = テキスト数量
   ActiveCell = 数値の変数
   数値の変数 = テキスト合計
   ActiveCell.Offset(, 1) = 数値の変数

Exit Sub

エラー処理へ:

   テキスト数量 = ""
   テキスト合計 = ""
   ActiveCell = ""
   ActiveCell.Offset(, 1) = ""

End Sub

このコードの書き方にもいろんな方法が考えられますが、私は、エラーが発生したら、テキストボックスやセルに入力した文字や数字をいったん全部消しちゃえってことにします。

上のコードを見て、コードを整理してみましょう。
見慣れないコードも出てきますが、こんな流れを覚えておきましょう。

Private Sub テキスト数量_AfterUpdate()

On Error GoTo
エラー処理へ
  @  On Errorステートメントって言います。

  このSubプロシージャー(プログラム)で実行したいコードを書きます。  

Exit Sub           A  Exitステートメントって言います。


エラー処理へ:              B  ここからエラー用の処理に入ります。

   エラーが起きた時に実行するコードを書きます。

End Sub                   C


さて@では、On Error Goto エラー処理へ
と書かれていますが、これはエラーが発生しそうなコードの前に入れることでエラーが発生したらエラー処理をするコードへジャンプしなさいって命令を与えているんですね。
「エラー処理へ」ってところは、ご自分の好きな名前でOKです。普通は、「err***」なんて風に最初にerrを付けることでエラー処理用のコードだと分かるようにするみたいですが、私は日本語にしてみました。

次にAでExit Subって書いていますが、一応このExit(出口)ステートメントで通常のプログラムの処理はここで終わってSubプロシージャーから脱出するように命令をしています。

Bのエラー処理へ:は「On Error Goto エラー処理へ」の記述以降のコード処理でもしエラーが発生した時にジャンプしておいでっていうエラー用の処理を記述するようになっています。

エラー処理へ:の(:)コロンは忘れずに

それとエラー処理用のコードは、BのExit SubとCのEnd Subの間に書くことで、通常のプロシージャの流れから区切るようにしています。エラーを処理するためのコードは、プロシージャ内の好きな場所に配置できますが、私はこうします。

 以上でエラー回避のコードの説明は終わりです。
実際にエラーを起こしてみて、うまく行っているかどうか確認して下さいね。
 これでEnterキーを押すとテキスト数量の文字「w」も消えてエラーも出なくなりましたね。
一応こんな感じのエラー回避方法も重要なプログラミングの手法になってきますので、ちょっとした知識として覚えておきましょう。
これでコンボボックスとテキストボックスの説明は終わりです。
次回からリストボックスの説明です。

[トップ][前へ][コンボボックス][次へ]