
Do until内の最後に以下のコードを記載しております。
-------------------------------------
Application.Wait DateAdd("s", 5, Now)
Loop
-------------------------------------
Loopさせる直前に5秒停止してもらいたいだけなのですが、
「コードの実行が中断されました」というエラーが出て終了してしまいます。
waitの指示を除いて時間待ち無しで実行すれば問題なくloopできます。
また、調子の良いとき(?)には問題なく5秒まってさくさくloopしてくれますが、
一度エラーが出ると一切loopしなくなります。
エラーの黄色いマーカーはこのLoopの部分に出ます。
なぜこのような現象が起こるのか全く理解できません、、、
以下のコードに変えても状況は同じです
With Application
.Wait Now + TimeValue("00:00:05")
End With
解決法ご存じの方、ご教示いただければ幸いです
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
なるほど、スクレイピングですね。
>検索エンジン検索結果のスクレイピングです、
>間隔を空けないとスパムと判断されてしまうからです。
経験ないですね。ただ、純粋にマクロコードだけみて、判断したのですが、実際の場では、アクセスする以外は、Wait Now+時間 という方法は、しないものなのです。たぶん、VBA側だけだと、負担が大きいからだと思います。
検索エンジンの検索結果ですと、画面が変わりますから、その画面で判定するというわけにはいかなかったのですか?(といって、突っ込んでも、最近は、VB/VBAも離れていますので、Webのイベントを取得する方法は、思い出すまで時間がかかりそうです。確か、IE Objectイベントと呼んでいたのですが……)
>単純に以下のコードを省く、あるいは " ' "を付けて無効にすれば
>普通に5秒の間隔を空けずに正常に動作します。
>こういった状況でも他からの信号の影響ってあるのでしょうか?
>Application.Wait DateAdd("s", 5, Now)
それは、内部(稼働しているApplication)自体の問題ではないはずです。つまり、マクロではないとは思います。何が、そうさせているかは、たぶん、私自身が実際のコードを直すにあたってもかなり大変だと思います。ProcessMonitor辺りでログを取るにしても、一瞬のことですから、かなり探しだすのが困難だと思います。だから、Interactive プロパティについて触れました。
なぜ、私が止める方法を聞いたかというと、Interactiveを発行すると、特殊な方法以外は、マクロが完了するまでは、手動では止まらなくなるのです。私個人としては、こういう場合は、Do ~Loopともう一つ、Flgを立てておいて、時間で終わるような、安全に終了する仕掛けを作っておきます。もちろん、PCですから、最後はタスクマネージャーという手段もあります。
Application.Interactive = False
'マクロ・コード
Application.Interactive = True
5秒というのが、微妙なんですね。もう少し、間を空けるなら、いっそのこと、OnTimeでもいいのではないか、なんて思いました。これだと、完全に一旦離脱して、再び、アクセスします。
お返事遅くなりました。
アドバイス通りに色々と試行錯誤した結果ようやく正常に動くようになりました。
ご親切にどうもありがとうございました。
No.2
- 回答日時:
>調子の良いとき(?)には問題なく5秒まってさくさくloopしてくれますが、
>一度エラーが出ると一切loopしなくなります。
Loopしないなら、まあ安全かなって思いますが、そのままのコードで、Escキーを押すと、Wait が抜けて、無限ループになる可能性もあります。
そのコードって、それだけ切りだされて質問されても良く分からないです。
>「コードの実行が中断されました」というエラーが出て終了
これは、他からの信号を受け取って中断したということです。VBAにも、実行中に外部信号を遮断する(Interactive)プロパティはあるのですが、状況によっても変わると思います。
経験的には、そのコードのタイプで、5秒間隔ですと、OLEやDDEからの外部信号を受け取るものが多いです。
このマクロは、どうやって止めるのですか?
通常は、Waitの代わりに、Win32 APIのSleepを置くのが通例ですが、そうとは限らないような気がします。
このままでは、単に、私の想像の範囲を越えません。
この回答への補足
ご回答ありがとうございます
説明不足で申し訳ありません。
>これは、他からの信号を受け取って中断したということです。
単純に以下のコードを省く、あるいは " ' "を付けて無効にすれば
普通に5秒の間隔を空けずに正常に動作します。
こういった状況でも他からの信号の影響ってあるのでしょうか?
Application.Wait DateAdd("s", 5, Now)
お時間ありましたらこの件だけでもお返事いただければ幸いです。
>このマクロは、どうやって止めるのですか?
検索エンジンの検索結果をxmlhttpで取得を繰り返し、
指定した数を取得すれば止まります。
検索エンジン検索結果のスクレイピングです、
間隔を空けないとスパムと判断されてしまうからです。
>通常は、Waitの代わりに、Win32 APIのSleepを置くのが通例ですが、
実行してみようと思います。
No.1
- 回答日時:
再現性に乏しいようですからあまりテストしていませんが、下記を見直したらなおりませんか。
・ループ内の連続処理が溜まったりしてしまうのでしょうから
DoEvents: DoEvents: DoEvents
を入れてみたらどうでしょう。
・時間にかかわる関数が同時に3つ使われているのも気になります。
Application.Wait DateAdd("s", 5, Now)
この回答への補足
ありがとうございます。
タイムスタンプを利用した暗号の生成(別ファイルを使用)などがありますので
全部のコードが載せられませんが、
帰ったらDoEvents試してみます、
これは
Application.Wait DateAdd("s", 5, Now)
のコードの真上にDoEventsを3回入力するという事ですよね?
初心者の質問で申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) ExcelVBAの転記について 1 2022/03/23 20:13
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1日に1人がこなせるプログラム...
-
sinカーブの表示のさせ方
-
PreviewKeyDownイベントが2回...
-
JANコードとPOSコードは同じ?
-
access2021 VBA メソッドまたは...
-
Exel VBA 別ブックから該当デ...
-
Excel VBAでOpenTextのFieldInf...
-
Excelシート上で右クリックがで...
-
VBAでファイルオープン後にコー...
-
JavaScriptの定数名が取り消し...
-
VBA ユーザーフォームの印刷に...
-
【VB6】実行ファイルとした後、...
-
access2003 クエリSQL文に...
-
SQL
-
ACCESSで、履歴事項を管理する...
-
◾️Excel VBA 統合について Cons...
-
エクセル VBA 同じ内容のセル...
-
オートフィルタで抽出結果に 罫...
-
RS-232の ボーレイト変更がで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1日に1人がこなせるプログラム...
-
access2021 VBA メソッドまたは...
-
JANコードとPOSコードは同じ?
-
Exel VBA 別ブックから該当デ...
-
Nullの使い方が不正です。
-
access2003 クエリSQL文に...
-
JavaScriptの定数名が取り消し...
-
オートフィルタで抽出結果に 罫...
-
PreviewKeyDownイベントが2回...
-
エクセルに見えない文字(JISX0...
-
VBAでファイルオープン後にコー...
-
Excelシート上で右クリックがで...
-
変数名「cur」について
-
Excel VBA素人です。VBAで図形...
-
【VB6】実行ファイルとした後、...
-
VBA 現在のセル番地を記憶、復...
-
COBOLの文法
-
ASCIIコードを文字に変換したい
-
wechatアプリについての質問で...
おすすめ情報