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)
-
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
wshで起動したコマンドををタイムアウト終了させる
その他(プログラミング・Web制作)
-
6
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
7
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
8
関数の引数でrangeを指定したとき
Visual Basic(VBA)
-
9
ExcelVBAで、タイマー割り込みって使える?
Excel(エクセル)
-
10
エクセルVBAでシートモジュールでのパブリック変数
Excel(エクセル)
-
11
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
12
VBAでの一時停止と再開の方法
その他(プログラミング・Web制作)
-
13
DoEventsがやはり分からない
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードセットにnullの場合
-
タイムアウトする仕組みを作りたい
-
TreeViewのTag情報取得
-
Matlab
-
subsequentとnextの違いってな...
-
【FPGA】VHDLのprocessとevent
-
vbsのmsgboxランダム表示について
-
Functionの戻り値を配列にした...
-
VBA public変数はどのようなこ...
-
他のフォームから別のフォーム...
-
C言語のサフィックスについて
-
アクセスできない保護レベルエ...
-
チェックボックスを操作できな...
-
C#のループでtextboxに値を入れ...
-
VB.NETでのイベントの途中終了
-
ClickとChangeイベントの違いは...
-
【VB6.0】 あるフォームから他...
-
ExcelのVBAで文章にある複数の...
-
プログラムの素朴な質問です 分...
-
VB6のFriendについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードセットにnullの場合
-
タイムアウトする仕組みを作りたい
-
subsequentとnextの違いってな...
-
vbsのmsgboxランダム表示について
-
日付の重複
-
verilogのcase文
-
片方のみ成り立つif分岐
-
TreeViewのTag情報取得
-
【FPGA】VHDLのprocessとevent
-
Verilogの文法
-
なんで? cEn-P^-1AP=P^-1(cEn-AP)
-
[至急]Project Euler:#21Amicab...
-
直線検出のハフ変換プログラム(...
-
pascalでの二分探索(バイナリ...
-
パスカル言語
-
Pascal言語
-
EXCEL VBA 文字 アドレス 検...
-
エクセルVBAついて ①if•••••the...
-
delphi
-
sublimit textっていうエディタ...
おすすめ情報