- ベストアンサー
vbaについて
ユーザーフォームで作ったテキストボックス1とテキストボックス2があります。 テキストボックス1、テキストボックス2にはそれぞれブログラムが書かれています。 テキストボックス1にキーボードから数字を入力してからテキストボックス2にキーボードから 数字を入力します。 本当はテキストボックス1を入力して、テキストボックス2を入力した後、エンターを押して二つのプログラムを同時に動かしたいのですがどうすればいいでしょうか? テキストボックス2のエンターイベントも試しましたが、全然ダメでした。 分かりにくい文章で申し訳ありませんが、教えて下さい。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
回答No.1さんの書いている通り、同時実行というのは不可能です。 コードは左から右、上から下へ実行されますので。 何をどうしたいのか良く分かりませんが、 複数実行コードを書く必要があるのならVBAでは無理でしょう。 で、同時ではありませんが、テキストボックス2を入力後にEnterキーの入力で テキストボックス2のコードからテキストボックス1のコードを呼び出す事は可能です。 コメント類はありませんが、ちょっと検索などすれば、すぐ理解できる内容です。 ’TEXTBOX1のコード Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode <> 13 Then Exit Sub MsgBox "TEXT1で<Enter>を押しました" End Sub ’TEXTBOX2のコード Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode <> 13 Then Exit Sub MsgBox "TEXT2で<Enter>を押しました" Call TextBox1_KeyDown(KeyCode, Shift) End Sub 上記のコードを実行すると、 TEXTBOX1でEnterキーを押すと「TEXT1で<Enter>を押しました」のメッセージだけが出ますが、 TEXTBOX2でEnterキーを押すと「TEXT2で<Enter>を押しました」のメッセージ後に 「TEXT1で<Enter>を押しました」のメッセージが出ます。 結果、TEXTBOX2からTEXTBOX1を呼び出している事になります。 ちなみに、このコードでは呼出を一方から行っているので問題はありませんが、 TextBox2の「Call」をTextBox1にも書いてしまうと無限ループになりますので注意して下さい。 また、Enterキー入力後はフォーカスも移動します。 他に標準モジュールを使う方法もありますね。 >shell関数なるものを使う場合どうすればいいのしょうか? 例えば、エクセルに下記コードを書いて実行すると、メモ帳が起動します。 ※何でもかんでも起動できるからと好奇心で変更して実行しないようにして下さい。 責任は持てません。 Sub Notep() Shell "C:\Windows\Notepad.exe", 1 End Sub これがShell関数です。 簡単に言えば、自分以外のプログラムなどを実行する関数です。 shell関数が分からないのであれば、 出来る限りVBAだけで完結にするのが一番いいと思います。 検証環境:Win XP(SP3) + Excel2007
その他の回答 (1)
- pa_cotta
- ベストアンサー率43% (25/58)
テキストボックス1とテキストボックス2にはプログラムコードが書いてあるんでしょうか? 状況がいまいち飲み込めないのですが…。 vbaはp-codeなのでなんちゃってインタプリタになりますので、同時には出来ないんじゃないでしょうか。 先に実行したコードが終了してからもう片方のコードを実行することになりますね。 もし外部ファイルを実行するのであれば、shell関数を使えば非同期で実行は可能です。
補足
回答ありがとうございます。 テキストボックス1、2にはコードが書いてあります。 shell関数なるものを使う場合どうすればいいのしょうか?