- 帖子
- 109
- 主題
- 2
- 精華
- 0
- 積分
- 114
- 點名
- 0
- 作業系統
- Win7 Win10
- 軟體版本
- Office 2019 WPS
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 深圳
- 註冊時間
- 2013-2-2
- 最後登錄
- 2024-11-6
|
本帖最後由 Joforn 於 2020-11-27 11:47 編輯
回復 5# mark15jill
很久都不用WebBrowser控件了。只能跟你大致說下處理流程。
在發送命令后,一般用- IsBusy=True '這個是全局變量,由WebBrowser的加載完成事件去將其值改變。
- Times=0
- Do While IsBusy And (Times<100) '檢測Times是否小于100,大于100判斷為程序出問題了,加載時間過長,強行中止程式運行。100次循環與后面的Sleep 200組合,表示最長等待20秒(Sleep參數以毫秒為單位)。
- Sleep 200 '這個是API函數,使用前要先聲明。加入這條語句是為了釋放CPU控制權,沒有這條,VBA的CPU使用率一直占99%
- DoEvents '釋放程序控制權,防止WebBrower出問題后無法退出,也是為了讓WebBrower有相應的CPU運行權去繼續加載頁面。
- Times=Times + 1
- Loop
複製代碼 然后還要再引用WebBrower控件的DocumentComplete- Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
- IsBusy = False
- End Sub
複製代碼 上面兩組代碼相結合,那么就可以完成一個等待頁面加載完成后,程式才繼續執行后續代碼過程。
但是,要注意:在WebBrower加載頁面開始后,并不一定只激活一次DocumentComplete,所以還要在WebBrowser1的DocumentComplete事件處理過程中進行一定的判斷來是否是真正的最后一次頁面加載完成事件。可以對比URL是否是當前頁面的URL來判斷:- Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
- If IsBusy Then IsBusy = URL<>DocumentURL '注意,這里的DocumentURL需要你自己根據你當前的頁面去獲取或是設置。
- End Sub
複製代碼 最后是你可能需要用到的函數和變量聲明:- #If VBA7 Then
- Private Declare PtrSafe Sub Sleep Lib "Kernel32.dll" (ByVal dwMilliseconds As Long)
- #Else
- Private Declare Sub Sleep Lib "Kernel32.dll" (ByVal dwMilliseconds As Long)
- #End If
- Private IsBusy As Boolean
複製代碼 |
|