
VB2008でWebにアクセスしています。
アクセス時に次の関数を呼び出して、表示が完了するまで待機しています。
Private Function WebWait(ByVal time As Integer)
Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
Loop
End Function
ただ、サイトが応答しなくてずっと待ったままになる場合があります。
10秒応答がなかった場合に処理を中断させたいのですが、方法が判りません。
PHPならば、タイムスタンプをスタート時間と比較して、終了判断させることができます。
こんな感じを考えています。
Private Function WebWait(ByVal time As Integer)
スタート時間を格納
Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
スタート時間と比較して、タイムアウトならLoopを抜ける
Loop
End Function
しかし、VB2008で同様の関数を見つけることができませんでした。
dateandtimeで似たものはありますが、ずっとカウントアップするものではありませんでした。
適切な関数、もしくは方法がありましたら、教えてください。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
タイマーコントロールを使ってはいかがですか?
タイムアウト用のフラグ変数を用意
dim m_bTimeOut as boolean
Private Function WebWait(ByVal time As Integer)
' タイマーの初期化
Timer1.Enabled = false
' ms単位なので 10*1000 を代入
Timer1.Interval = 10 * 1000
' フラグを初期化
m_bTimeOut = false
Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
if m_bTimeOut = true then
Timer1.Enabled = false
MsgBox "タイムアウトしました"
end if
Loop
Timer1.Enabled = false
End Function
' タイマーイベント
Private Sub Timer1_Tick(引数省略)
m_bTimeOut = true
Timer1.Enabled = false
End Sub
といった具合で ・・・
この回答への補足
回答ありがとうございます。
タイマーコントロールは勉強不足でした。
名前は知っていたのですが、何だか難しそうで敬遠していました。
これを機会にチャレンジしてみます。
最終的にこのような形で無事に実現できました。
まずTimer1をフォーム上に設置してから、コードを次のようにしました。
目的どおりに動作しました。
ありがとうございます。
※スペースは全角です。
Dim WebWaitTimeOut As Boolean = False
Private Function WebWait(ByVal time As Integer)
Timer1.Enabled = True ' タイマーの初期化
Timer1.Interval = 10 * 1000 ' ms単位なので 10*1000 を代入
WebWaitTimeOut = False ' フラグを初期化
While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
If action_loop = False Then Return True
Application.DoEvents()
If WebWaitTimeOut = True Then
Timer1.Enabled = False
Exit While
End If
End While
Timer1.Enabled = False
Return WebWaitTimeOut
End Function
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
WebWaitTimeOut = True
Timer1.Enabled = False
End Sub
No.2
- 回答日時:
No1.訂正
Sub sec_wait(Byref x )
Dim xsec As Variant
xsec = Second(Time)
If xsec = 59 Then
xsec = 1
Else
xsec = xsec
End If
Do While Second(Time) <= xsec + x
DoEvents
Loop
End Sub
10秒待つ時は、sec_wait(10)とする。
No.1
- 回答日時:
Sub sec_wait()
Dim xsec As Variant
xsec = Second(Time)
If xsec = 59 Then
xsec = 1
Else
xsec = xsec
End If
Do While Second(Time) <= xsec + 0.5
DoEvents
Loop
End Sub
これを使って10秒待つ時は、sec_wait(10)とする。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
このQ&Aを見た人はこんなQ&Aも見ています
-
一定の時間が経過したら、処理を止めたい
Visual Basic(VBA)
-
wshで起動したコマンドををタイムアウト終了させる
その他(プログラミング・Web制作)
-
EXCELVBAでSQLserverからデータをひっぱってきてエクセルに表示させたい
Visual Basic(VBA)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
6
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
7
エクセルVBAが途中で止まります
Visual Basic(VBA)
-
8
excel vbaから実行するexe実行の黒い画面の非表示
Visual Basic(VBA)
-
9
ExcelVBAで今開いているユーザ情報を取得できますか?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Verilog-HDLによる設計において
-
変数に「.」が含まれる場合...
-
[至急]Project Euler:#21Amicab...
-
matlabのfor文について
-
pascalでの二分探索(バイナリ...
-
VBAでWorkbook_BeforeSaveイベ...
-
Verilog-HDLのFF記述について
-
Verilogの文法
-
リスト間のアイテム移動について
-
delphi
-
BMPファイルを作成し保存
-
VBA public変数はどのようなこ...
-
ベンチマークの実行結果の表示...
-
プログラムにくわしいかた教え...
-
ピクチャボックスのサイズを状...
-
[Excel2000]auto_closeを止めさ...
-
整数かどうかチェックする
-
C#のループでtextboxに値を入れ...
-
サンプルプログラムをコンパイ...
-
ユーザーフォームへのデータ入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードセットにnullの場合
-
タイムアウトする仕組みを作りたい
-
subsequentとnextの違いってな...
-
delphi
-
日付の重複
-
なんで? cEn-P^-1AP=P^-1(cEn-AP)
-
matlabのfor文について
-
TreeViewのTag情報取得
-
pascalでの二分探索(バイナリ...
-
Verilogの文法
-
FORTRAN77でプログラミング
-
vbsのmsgboxランダム表示について
-
クラスモジュールの処理
-
verilogのcase文
-
VBAでWorkbook_BeforeSaveイベ...
-
Why is 77+33 not equal to 100?
-
リスト間のアイテム移動について
-
VBA public変数はどのようなこ...
-
他のフォームから別のフォーム...
-
エクセルVBAでテキストボッ...
おすすめ情報