dポイントプレゼントキャンペーン実施中!

現在、VBAに以下のようなコードを記述しています。
(詳細は省略しています)

=========================
sub IE自動実行()
Dim myCnt As Long
For myCnt = 1 To 5
詳細コード/ここから


詳細コード/ここまで
Call Shell("taskkill /im iexplore.exe /F")'ここで強制終了
Next myCnt
End Sub
=========================

上記のように、同じ処理を5回繰り返すように記述していますが、
IEがbusy状態になった時に一旦IEを強制終了させて、
再開するようにしています。

しかし、「'ここで強制終了」のコードに到達する前に、
busy状態でIEが止まってしまうことが多々あります。

そこで、
「Dim myCnt As Long」から
「Next myCnt」までの間の処理を進めている過程で、
30秒を経過したらIEを強制終了するようにしたいです。

つまり、
Call Shell("taskkill /im iexplore.exe /F")
のコードに到達する前に処理が止まってしまっても、
開始から30秒を経過してしまったら、
IEを強制終了して、
「For myCnt = 1 To 5」に戻れるようにしたいのです。

恐れ入りますが、どなたかお分かりの方がおられましたら、
ご教授いただけましたら幸いです。

宜しくお願い申し上げます。

質問者からの補足コメント

  • 回答ありがとうございます。

    >ループ内で経過時間を測って、タイムオーバーなら抜けるように制御

    上記のサンプルコードを探したのですが、
    どうしても見つけられません。

    どのように記述すればよいか、
    教えていただけないでしょうか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/04/21 20:26

A 回答 (2件)

No1です。



真の原因が何かわからないし、質問者様がどのようなコードで処理をしているのか不明な状態で、
>どのように記述すればよいか、
とだけ言われても・・・

方法は簡単で、最初に時刻を取得してそれにタイムアウトの設定時間をプラス。
ループの中でその時刻とタイムアウトを比較してオーバーしてれば、ループを抜けるだけ。
・・・なんだけれど、それが当てはまるようなコードを質問者様がつかっているのかどうかすら不明なので、部分的にコードを書いたところで「うまくいきません」とか言われるのが毎度のオチなので。
(この手の雰囲気だと「うまくいかない」以外の情報が得られないことが多いので)

>どうしても見つけられません。
え~~!!
試しに、VBA IE タイムオーバー あたりをキーに検索してみましたけれど、上位10個くらいの中にいくつも見つかりましたけど・・・???
    • good
    • 0

こんにちは



>コードに到達する前に処理が止まってしまっても
止まっているという事象がどのような状態を指しているのかわかりませんが、確か、VBAはシングルスレッドのはずなので、本当に停止しているのなら他の処理を行うことは無理と考えられます。

実際の処理内容が不明ですが、想像するところ、単に、busyからの開放待ちのループを抜けてこないだけとかではないのでしょうか?
もしそうなら、ループ内で経過時間を測って、タイムオーバーなら抜けるように制御すれば良いだけでと思いますが?
(探せばサンプルもありそうな気がしますが‥)
この回答への補足あり
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!