マクロの連続実行をテストしていたら「実行時エラー」って表示されて動かなくなっちゃったんです! どうしたらいいの?
やっぱりでましたか! そうなんですよ。以前の記事で自動記録されたマクロは、気を付けないとエラーが出ることが多いんです。それじゃ今回はエラーが出た時にどうしたらよいか実際にやってみましょう(^^)
わからなくなったら過去の記事でおさらいしましょう(^^)/ 下のカードは前回の記事です
前回記事でわかったこと
・ActiveXコントロールの「コマンドボタン」の設置方法がわかりました
・「マクロ」を連続実行する「Call」ステートメントの使い方がわかりました
・新しいプロシージャをつくって「ボタン」に登録する方法がわかりました
【この記事でわかること】
・「実行時エラー」の対処方法がわかります
・デバッグの基礎的な方法がわかります
ExcelVBA(マクロ)で「実行時エラー」が出たら
前回までの初心者向け記事で「マクロの記録」をテストしました。自動記録された「マクロ」連続実行させたりしましたが、実際に動かしてみた人は「実行時エラー」が出ていたと思います。実は、これは、この記事に向けてあらかじめ想定していたことでした
「実行時エラー」が出た場合にどうしたらいいんだろうと思い。どうしようもなくて諦めてしまったり、上級者にお願いして対応してもらうことが多かったのではないでしょうか
この機会に、知っておいた方が良い基礎的なデバッグについて解説していきます
「デバッグ」ボタンを押してみよう
前回までの記事で自動記録した「マクロ」を連続実行させた場合次のような「実行時エラー」のメッセージがポップアップされたのではないでしょうか
・「実行時エラー‘1004’: 指定した名前のアイテムが見つかりませんでした。」と表示されています
・「デバッグ」とはプログラムの誤り(=バグ)を見つけ、手直しをすることをいいます
・では「デバッグ」ボタンを押してみましょう
・すると、VBE(Visual Basic Editer)が開き、画像のとおりコードの途中で止まっています。止まった個所は黄色マーカーで表示されています。この部分でエラーが発生したということです
・メッセージは「指定した名前のアイテムが見つかりませんでした。」となっていましたので、このコードのアイテムを確認してみましょう
・コード「ActiveSheet.Shapes.Range(Array(“Rounded Rectangle 5”)).Select」を見ると「“Rounded Rectangle 5”」という名前の「Shapes」というアイテムだということがわかります
「エラー」の原因を探してみます
・では、このアイテムを確認してみます。Excelブックのシートを見てみましょう
・上の画像のとおりアイテムはShapeの「ボタン」であることが確認できます
・気になるのはその番号です。コードは「5」となっていましたが赤丸の中をよく見ると「1」となっています
・この番号の違いがエラーの原因であると思われます
「デバッグ」してみましょう
・コードに戻ってきました。次の順番で動かしてみます
① 「5」を「1」に書き換えます
② 「ステップイン」ボタンを1回押して(または[F8])「ステップ実行」します
③ エラーとなっていたコードの行から次の行へ黄色マーカーが移動しました
・これは「エラー」部分の修正が正しかった。「直った」ということです
・「デバッグ」は、このようにマクロを”一時停止状態”にして、間違いを探す作業のことです
② の「ステップイン」ボタンが表示されていない場合は次の画像を参考にして表示させるか、「デバッグ」メニューの中の「ステップイン」(ショートカット F8)を選択してください
再び「エラー」発生!
・実行を続けたところ、再び「エラー」がポップアップされました
・先ほどとは違う「エラー」のようです
・「実行時エラー:9 インデックスが有効範囲にありません。」
・これは、比較的よく起こるエラーです
・「デバッグ」を押してみましょう
・コピーしたデータを貼り付けようとしたところ「エラー」が出たという状況です
・コードでは「”Sheet9”」となっていますが左側の「プロジェクト」に表示されているシートに「”Sheet9”」は存在していません。「存在しないインデックスを指定した」これが原因です
今回のエラーは、「マクロの記録」テストで作成されたコードの連続実行で発生したものです
「マクロの記録」では、シートをコピーしたりする動作を繰り返して実行すると、そのたびに「記録したマクロ」とは違うシート名で新しいシートが作成されてしまうためにこのようなエラーが発生してしまうのです
「デバッグ」の基礎的な方法
「デバッグ」メニューから基本となる部分を説明しておきます
※リンククリックで説明にジャンプします
基本として覚えた方が良ものだけ説明します
・ステップイン ⇒コードを1行ずつ実行
・ステップオーバー ⇒呼び出しプロシジャー内では処理を中断しない
・ステップアウト ⇒現在のプロシージャを最後まで実行して呼び出し元に戻る
・ブレイクポイントの設定/解除 ⇒「実行を止めたい行」に設定してコードを中断します
ステップイン [F8]
・ステップインで操作を行うと1行ずつ処理を進めて動きを確認することが出来ます。動作確認を処理の流れ順に思った動きとなっているかどうか確認したい場合に使用します
ステップオーバー [Shift+F8]
プロシージャを呼び出している行でステップオーバー操作を行うと、呼び出しプロシージャ内の処理は中断しません
ステップアウト [Ctrl+Shift+F8]
ステップアウト操作は、現時点で処理が中断しているプロシージャ内で処理は中断せず、 呼び出しもとへ速やかに戻ることができます。 但し、現時点のプロシージャ内にブレークポイントが設定してある場合はそこで処理が中断します
ブレイクポイントの設定/解除 [F9]
指定した行で、プログラムの実行をいったん止めることができます
設定(解除)方法は次の二つがあります
・「実行を止めたい行」の左側の灰色部分を左クリックする
・「実行を止めたい行」を選択して[F9]キーを押す
ブレイクポイントがどこに設定されているかは、設定された行は赤茶色になるっているのですぐにわかります
どうですか。少しむづかしかったかなぁ(^^)
「エラー」が出たときの対処の仕方が何となくわかってもらえたかな?
はい!なんとなくわかりました。これからは「エラー」が出てもあわてずに今日教わったことをいろいろ試してみたいと思います(^^)
・今回はここまでで終了です!
・この続きは次回の記事まで少しお待ちください・・・・
・次は少し早いかもしれないけど「マクロの高速化について」紹介したいと思っています
・是非ご期待ください(^^)/
まとめ(おわりに)
まとめと感想など
・「実行時エラー」の対処方について具体的な対処方法を解説しました
・発生する「エラー」には様々なものがあるので全部対処できるわけではありませんが、知っているのと知らないでいるのとでは大きな差が出てくると思います
・初心者でも知っておいた方が良い「デバッグ」の基礎的な方法も解説しました
・今後、VBAについての知識がついてきたときに一番役に立つ知識だと思います
・マクロ(VBA)を実行する際は必ずバックアップを取ってから行ってください!
・マクロ(VBA)は実行後にファイルを保存すると元に戻すことはできません!
・実行後にファイルを保存せず終了すれば、実行前に戻すことができます!
★★★ ランキング参加中! クリックしてね(^^)/ ★★★
今後の記事について
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
今回の記事はサンプルファイルがありませんm(__)m
当面は今回の記事に続き「初心者向けマクロ」の記事を継続して書いていきます
【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう現在検討中です
・その他雑記的に「小ネタなどいろいろ」・・・・・
・今後の記事にご期待ください(^^)/
各記事で使ったサンプルファイルをダウンロードできます(下記リンク先へ)
記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください(今回の記事にはサンプルはありません)