• ベストアンサー

VBA:助けてください。呼び出してもいないのに独立なプロシージャへ、処理が飛んでしまう。アドバイスお願い致します。

Useform1のコマンドボタンをクリックすると Private Sub CommandButton1_Click() Call 処理 End Sub というように、「処理」を呼び出し。これで終わるようにしていました。しかし、不具合が出てしまい、ステップインで見てみると「処理」からEndSubに行き、その後Useform2のコマンドボタンイベントのEnd Withへ Private Sub CommandButton1_Click() With Userform1 .... End With ←    ・・・ End Sub 上のように矢印の部分へ飛んでしまいます。全く、独立な、コマンドイベントへ飛んで処理されているのです。それも、飛んだ箇所がEnd Withからです。こんなことがあるのでしょうか? Private Sub CommandButton1_Click() Call 処理 Exit Sub End Sub 上のようにExit Subを追加してもやはりそこから飛んでしまいます。 なぜでしょうか?詳しい方アドバイスお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

「何々のはず」論からいえば、Private Sub CommandButton1_Click()とどちらも同じでもUserForm1と UserForm2のクリックイベントの飛び先は区別してくれているはず。この点で重大なバグがあるとのことも聞いたことがない。だから質問になるわけですが。 こういう場合、他(システムのバグ等)を疑いたくなるが、経験から、自分のミスだと極力考えを持っていって、原因究明に当たるべきと思います。 UserForm2に飛ぶ原因が何かないか 、実際に飛んでいるのか再確認されては UserForm2の Private Sub CommandButton1_Click() With Userform1 .... End With ←    ・・・ End Sub のPrivate Sub CommandButton1_Click()の直下に MsgBox "通過1"とでも入れて、実行してみては。 With Userform1の下にも MsgBox "通過2"をいれてみるとか。 もう少し詳しいコードの紹介がないと、「ではないか」 論に終わってしまいそう。 経験から、プログラムって、一部だけ示して、問題箇所が見つかるほど、易しい作業と思いますか。えてして自分の注目点以外に原因がある場合が多い。だからこそ梃子摺る ので、当たり前のことを言っているに過ぎないですが。

その他の回答 (3)

回答No.4

#3さんがおっしゃるとおり現状では「たられば」にしかなりませんね。 ちょっと確認できる状況ではないのですが、 一応一般論としては、当然 Call 処理 の内容を疑うことになりそうです。 この中にUseform2の内容を変更するような処理はしていませんか? それとUseform2の更新後処理などにCommandButton1_Clickをイベントに割り当てしていれば、そのようなことになるかもしれません。 確認できないんで不明確なことですが、その辺を確認していただいて補足していただければもう少し詳しく回答できるかもしれません。

  • hisappy
  • ベストアンサー率46% (184/392)
回答No.2

ボタンの名称が同じなので、VBが区別できなくて 両方の処理を実行しているようです。 Useform1とUseform2のボタン名を異なるものにしてしまうのでは だめでしょうか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

CommandButton1_Click() が2つあるってことですか?