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)
-
EXCELVBAでSQLserverからデータをひっぱってきてエクセルに表示させたい
Visual Basic(VBA)
-
wshで起動したコマンドををタイムアウト終了させる
その他(プログラミング・Web制作)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
6
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
7
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
8
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
9
DoEvents関数って何?
Visual Basic(VBA)
-
10
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
11
VBAでの一時停止と再開の方法
その他(プログラミング・Web制作)
-
12
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
13
DoEventsがやはり分からない
Visual Basic(VBA)
-
14
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
15
EXCEL VBA マクロ 実行する度に処理速度がどんどん遅くなる原因が知りたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タイムアウトする仕組みを作りたい
-
レコードセットにnullの場合
-
subsequentとnextの違いってな...
-
「for next」文と「if then els...
-
リスト間のアイテム移動について
-
vbsのmsgboxランダム表示について
-
パスカル言語
-
他のフォームから別のフォーム...
-
VBA public変数はどのようなこ...
-
VB
-
エクセルVBAでテキストボッ...
-
VBAのフォーム カーソル移動
-
定数を構造体で・・・
-
VBによる回帰直線のプログラム
-
演奏記号の・・・・
-
プロシージャまたは関数の引数...
-
Picture box の サイズを変更
-
テキストボックスに入る文字を...
-
文字の判断
-
ExcelのVBAで文章にある複数の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タイムアウトする仕組みを作りたい
-
レコードセットにnullの場合
-
subsequentとnextの違いってな...
-
日付の重複
-
verilogのcase文
-
Verilog-HDLによる設計において
-
Verilogの文法
-
リスト間のアイテム移動について
-
Rubyプログラミングの課題につ...
-
EXCEL VBA 文字 アドレス 検...
-
Delphiでコンポーネント名を変...
-
delphi
-
TreeViewのTag情報取得
-
pascalでの二分探索(バイナリ...
-
エクセルVBAついて ①if•••••the...
-
「for next」文と「if then els...
-
整順リスト形式の英単語辞書(pa...
-
直線検出のハフ変換プログラム(...
-
Matlab
-
【FPGA】VHDLのprocessとevent
おすすめ情報