[三流君(ken3.org)]/ [VBA(TOP)]/ [F1でヘルプを見る]/ [Debug.Printを使い値の確認]/ [ウォッチ式とSTOP]/ [デバッグ方法ほか]

実行時エラー、あわてないでデバッグを押す、デバッグ方法解説

急に音と飛び出してくる エラーのウインドウ、とてもイヤですね。
まぁ、あわてないで、デバッグボタンを押して 止まった場所 や 変数の中身などを確認しましょう
※2006-05-09 デバックからデバッグと文字を修正しました。
※2008-05-17 番外編でブレークポイントを貼ってデバックするそんな方法を紹介

こんにちは、三流プログラマーKen3です。

今回は、
実行時エラーが発生した時にあわてないで、
デバッグモードを押して確認する方法を軽く書きます。

気楽に読んでください。

また、前にイミディエイトウインドについて軽く書いた、
http://www.ken3.org/vba/iwind.html
もあわせて見てください。
/*
 * 1.エラーが出るとイヤだよね。
*/

AccessからExcelのApplication.GetOpenFilenameを使用して、
ファイル名を取得する解説を
No.47 Excel Application.GetOpenFilenameでファイル名取得
http://www.ken3.org/backno/backno_vba10.html#47
でやりました。
サンプルファイルは、
http://www.ken3.org/vba/lzh/vba047.lzh
にtest047-book.xls, db047.mdbが保存されています。
(Excel97,Access97)

下記のエラー内容のメールと添付ファイルが読者より来ました。

In message "画像のダイアログありがとうございましたぁ〜。",
m*****@k*****さん wrote...
 >ダイアログの表示(ここまでは師匠のマネでばっちり)
 >ここから
 >画像を指定すると「実行時エラー」が…。(T◇T)
 >           ↓
 >指定されたデータ量がフィ−ルドサイズを超えています。
 >データ量を減らし、挿入または貼り付けを行ってください。
 >  ↓
 >「デバッグ」
 >  ↓
 >Me![F_GFILENAME] = strFNAME  '選択されたファイル名をセットする
 >
 >
 >う〜ん。
 >師匠のファイルでは、どの画像も問題なく表示されるのに…。(T_T)
 >あぅ。
 >
 >何故?、コケているのでしょうか?
----

んっ?師匠?いつから、、、まぁそんなことは、置いといて(なんか恥ずかしいけど)
実際動かしてみると、
あっエラーがでますね。

/*
 * 2.あわてず騒がずデバッグのボタンを押す。
*/

実行時エラーが表示されると、
[終了] [デバッグ]とボタンが押せます。


ここで、あわてないで[デバッグ]のボタンを押します。
すると、エラーの場所が黄色く反転されて、
ここだぞ、ここ、、ほら直せよ、、と表示されてます。
~~~~~~~~~~~~~~~~~~

/*
 * 3.変数にカーソルを合わせると値を表示、?で表示、関数も使えるよ
*/
場所の確認だけでわかってしまう場合も多いんだけど、
変数にカーソルを合わせると、中身が表示されます。

また、イミディエイトウインドウで、
? 変数名とやっても、中身を表示可能です。
さらに、
?  Len(変数名)
と、エラーで止めたまま(止まったまま)、
関数を実行することも出来ます。
*意外と便利です


いろいろと値の表示などで探りを入れて、
あっ、ディレクトリが深いと(文字数が多いので)エラーなんだなぁ、
とエラー原因を無事つきとめました。
私のテスト環境ではD:\vba-test\と深くなく、
読者さんの環境では、My Documentsの下、、と長かったためでした。

デバッグ操作なれてくると、あたりまえの操作なんだけど、
はじめは私も知らなくって、苦労しました。
*私は、人がやってるのみて、
 あっ、こんなこと出来るんだぁとデバッグの使い方を覚えました。

もっと、便利な使い方もあると思う。(みなさんのやり方もぜひ教えてね)
何か探り出したらまた得意になって、操作方法をお知らせしますね。
*えっ、知ってるよってことかも知れないけど、、、

/*
 * 5.おわりの挨拶
*/

今回は、
・実行時エラー発生、あわてないでデバッグモードに
・変数にカーソル合わせると中身が表示されます
・?や関数を使ってイミディエイトウインドウで確認できます。
でした。

また、前にイミディエイトウインドについて軽く書いた、
http://www.ken3.org/vba/iwind.html
もあわせて見てください。

何か素朴な疑問などあったら、メール、掲示板に気軽に書いてください。

拾い読みして、
1つでも何かの参考となれば幸いです。

Excel/Access大好き、三流プログラマーKen3でした。

質問や要望、クレームを送る(三流君に連絡する 連絡方法)

質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。
あなたのお名前(ニックネーム):さん
返信は?: 不用(HP更新を待つ) , E-mail→ アドレス:に返事をもらいたい

(感想や質問・要望・苦情はHPで記事に載せることがあります。)

急ぎで連絡がほしい、そんな時は:[三流君連絡先]に連絡してください。

番外編・おまけ


0228 Debug.Print を 使い、データをイミディエイトへ表示

Excel UserFormのタイトル(.Caption)に文字をセットしてデバッグ 03/01

Stopで止めて debug.printを使いデバッグ 03/09

03/14 エラー処理を入れる 危ないポイント、見つからない時の処理

IE操作のデバッグ(番外編)

私の唯一の人気 IE操作の記事
[三流君VBAでIE操作 InternetExplorer.Applicationを操作する]
から、番外編として、ブレークポイント(やSTOP)を設定して、変数をウォッチする、そんな方法を載せます。
※エラー時に止める だけじゃなくて 正常処理時の途中で止めて確認する そんなイメージです。

デバッグで止めて、現物の変数objIEを見る

資料探しに飽きたら現物を動かしながら見る、そんな方法もあります。デバックで止める、ウォッチで中身を見るがポイントです。※一度くらいは資料だけじゃなくて現物をさわってみては?

あんまり好きじゃないけど、
ブレークポイントを設定し、デバックで止めて、変数の中身・オブジェクトを見てみます。
~~~~~~~~~~~~~~~~

Sub xxxxx()
    Dim objIE    As Object  'IEオブジェクト参照用
    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Visible = True '見えるようにする(お約束)
    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://xxxx.xxxx.xxx/yyy.html"
    'デバックで止める
    MsgBox "OK?"
End Sub
右クリック、設定・解除 -- ブレークポイントを選択し、設定します。
←参考画面
※左側の余白を押してONとOFFを切り替えてもOKです。

次にobjIE変数のオブジェクトの中身を見たいのでウォッチ式を追加します。
追加方法は、どこでもいいので、ソースの画面で
objIEをドラックして反転表示の選択後、右クリックしてウォッチ式の追加を選択します。
←参考画面

実行して、オブジェクトの中身を探る
ブレークポイントの設定
変数objIEをウォッチする準備が整ったので、
実行して、変数の中身を探ってみます。

実行すると、ブレークポイントの場所で止まります。
当たり前だろ、そのために設定したんでしょアナタが。
そうでしたね。

ブレークポイントで止まってからは、
飲み会に誘った女の子みたいに逃げないので
落ち着いて中身をチェックしましょう。
(飲み会で女性陣に逃げられてるみたいだなぁ、この書き方だと(笑))

ウォッチウインドウの変数名の横+をクリックして中身を探って行きます。
←参考画面
それにしても、階層が深いです。
テーブル系のオブジェクトを探すが、なかなか見つからない(笑)
(女の子じゃなくって、IEの心の中は複雑なのね、、、)

中身を確認するために、となりのイミディエイトウインドウで、
←参考画面
? objIE.document.body.innerText
とか、中身を聞いてみた(アクセスすることもできます)

ここだけは静止画よりも動画操作イメージの方がいいのかなぁ?

と思ったが、↑動画解説もダラダラ長い・・・静止画を大量に貼る方が見やすいのかも(静止画だと上に戻るのも簡単だしね、動画は説明の少し前に戻るのが不器用だと大変)
※説明で、左側を右側とか言ってるし、イミディエイトウインドウで変数の中身を見る時 空白連発でいつものグダグダ(笑)
※10番目とか本人言ってたけど、Item10番目なら 10-1でDocument.All(9)と9を指定しないとね(意外と読者様も間違えるかも?)。ツリーで見ていたデータが9と気がつかないで11・12と実行して気まずくなったからOuterHTMLに変えようとするがスペルを間違える最悪ですね。女性とデートなら中ならたぶん逃げられてるなキット

何かの参考となれば 幸いです


分類別に記事を紹介

分類別といっても、あまり分類別にまとまっていないのですが、、、↓

よく使う操作方法

F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。
なれると当たり前に操作している方法が↓かなぁ。
[プロパティ、メソッドを探る方法]・・・基本のF1を押してヘルプを見る方法など
[実行時エラー、あわてないでデバックを押す]・・・デバッグの流れを簡単に(ハマった時はツライけど)
[イミディエイト ウインドウ と Debug.Print]・・・プログラム作成時に便利なイミディエイト ウインドウ
[VBA ウォッチ式とSTOP]・・・STOPで止め、ウォッチ式でオブジェクトの中身を確認する方法など
[参照設定のお話]・・・設定すると便利な(設定しないと使えない)、参照設定のお話
[サンプル 実行方法]・・・Alt+F11 や ツール--マクロ から VBAの編集画面を開き F5で実行?

仕様書のお話(XXX設計書)

イロイロな仕様書・設計書を各工程で使っていくのですが、その一部を書きました。
[基本設計書/仕様書のお話]・・・仕様書・設計書を書いてますか?簡単な流れを書きました。
[テスト仕様書のお話]・・・テストデータ XXXXを入力したら、YYYYになる ほか
[バグの連絡票とテストケース]・・・バグ・不具合の連絡を受けたら 原因を書き 処置する。
[関数仕様書のお話]・・・仕様書は頭の中にありますでいいの?かよ?
[作業の流れ 入力・処理・出力ほか]・・・フォルダー選択を例に仕様書と流れを解説

プログラムのお話

[作成時 Ctrl+C Ctrl+Vの前によく考えよう]・・・コピープログラムの落とし穴?
[関数に汎用性を持たせる、共通に使える関数作り]・・・共通に使える関数(財産)を作りましょう

Access関係:アクセス側からのアプローチ

[AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
[Accessのレポートを操作]・・・レポートを操作してみました
[Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

Excel関係:エクセル側からのアプローチ

[Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です

その他:VBAの共通関数やテキストファイルの操作など

[VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

blog:あまり更新していない作業日記 → [三流君の作業日記] と [通販商品の足跡] も よろしくお願いします。



[三流君(Ken3.org)] / [VBAで楽しく] / [VBA バックナンバー]