かなり無理っぽいですが質問します。VBA(しかもMS-Word2003なんですけど)、ある一連のコード(といっても多数のモジュールを渡り歩いて帰ってくる)を実行すると、どこかの変数に「98」が代入されます。変数名は分かりません。しかし必ず代入されています。


この98が代入された変数を突き止めることはできますか?
変数名が知りたいのです。
私にはどうにもできないので教えてください。
よろしくお願いします。

(F8押しながらすべての変数を追っかけるのは無しで・・・お願いします)

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/12/15 01:26:23
  • 終了:2007/12/22 01:30:03

回答(1件)

id:airplant No.1

airplant回答回数220ベストアンサー獲得回数492007/12/15 15:32:16

ポイント60pt

「どこかの変数に98が代入」というシチュエーションが良く分からないのですが、、、

どの変数に代入されたかということは、分かると思うのですが、それが分からないのですね。


変数aがある値になったらブレークするということは、VBAにて次の設定でできます。

デバッグ → ウォッチ式の追加 → 式に「Not (a - 98)」 → 対象のプロシージャとモジュールはその変数があるスコープを設定 → ウォッチの種類:式がTrueのときに中断を選択

変数分書く必要がありますので、変数が100個とかあるなら別手段がいいかも知れません(ロジックのチェックなど)。


これでマクロを実行すれば、変数が特定の値になったときに止まり、どの変数だったかが分かります。

http://www.google.co.jp/ (dummy)

id:Nigitama

ながらくウォッチの上でのご回答ありがとうございます。

まず質問文にも書いたとおりですが、変数名は分かりません。

F8押しながら目で追っていくのもうんざりするほど長いものでして、当然変数の数もかなりのものです。

確かにウォッチ式に入れていけばいいですけど、それにはまずすべての変数名を書き出さなければなりません。

いや、せめて、「dim hoge as 数値型」を探してリストアップする必要があります。ちょっとはマシですけど。

しかしこれは最終手段です。

今やりたいのは「変数名が不定のウォッチ式」のようなものです。

「どこかの変数 = 98」がtrueになったら中断する

みたいな感じです。

回答上限を2にあげておきます。

コメント欄もあけておきます。

ありがとうございました。

2007/12/15 15:43:51
  • id:airplant
    変数のいずれかに98が代入でbreakするのは無理と思います。

    まず、どういうことでこのようなデバッグが必要になっているかを書いてもらえばアドバイスできるかも知れません。
    98が代入されているということまで分かっているという事は、変数も分かっているように見受けられるのですが、変数は分からない状況なのですね?

    >「dim hoge as 数値型」
    これは一発で探せると思うのですが、指定困難な個数でしょうか?
    一回指定してplayすれば、F8で動かさなくてもbreakします。

    変数が鬼のようにあるときは、先ずは、デバッガに頼らずにプログラムを見直すのが速そうですね。
  • id:Nigitama
    ありがとうございます。
    まずはそもそも私の書いたプログラムではないということから話が始まるんですね。

    で、プログラムの構造自体は変えるつもりはなくて、
    そのプログラムの一連の流れの中で処理しているある地点で行われた計算結果を自分の作ったモジュールに持ち込みたいというわけです。

    数値型の変数も鬼のようにあるわけではないので、grepかけてすべての数値型をウォッチしてしまいましょうか。

    必ず代入されてると書きましたが、ひょっとして100の入った変数と2の入った変数とで計算した結果を吐き出しているのかもしれませんし。。。

    とにかくありがとうございます。
  • id:airplant
    >そのプログラムの一連の流れの中で処理しているある地点で行われた計算結果>を自分の作ったモジュールに持ち込みたいというわけです。
     このある地点で行われた計算結果をprintするなりすれば、何かヒントになりませんでしょうか?

    >必ず代入されてると書きましたが、ひょっとして100の入った変数と2の入った>変数とで計算した結果を吐き出しているのかもしれませんし。。。
     変数に代入されるのであれば、計算結果でもbreakします。しかし、この記載内容だと関数の戻り値になっているかも知れないということでしょうか?
     関数の戻り値ならば、その関数の先頭で引数なり参照するグローバル変数をbreakすれば分かると思います。
  • id:garyo
    モジュールの真ん中あたりにbreakを置き、localウインドで変数の一覧をチェックしてみてはどうですか。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません