大致如題,因為我有一個工作簿,其內部會有4~5個對外連線做匯入的功能
然後由於匯入後會多了一欄空白欄、與一列亂碼
所以我用程式將其欄列做刪除..
另外再對其標題欄做調色與字體等規格化設定
可是,往往都是網頁尚未更新完,程序就先跑完了..
查了下書本,但太高深
寫著
do while .busy or .readystate <>4
、、、、
因為書本內只大致提了下,所以實在看不懂,想請教這是何意..
與正確完整寫法要如何撰寫才能迫使程式不要雞婆快速執行..感謝
MaverickRay wrote:
do while .busy or .readystate <>4
樓主,Do 是迴圈開始,後面應該要有迴圈結尾loop喔。
一般可能寫成:(一行)
Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
分行解釋:
Do While .Busy Or .ReadyState <> 4 '當網頁忙碌時(.Busy Or .ReadyState <> 4) 就進行迴圈。
'(.Busy Or .ReadyState <> 4)為非的話,迴圈就不執行。
DoEvents '控制權交還給系統,以便可處理其他事件
Loop '迴圈繼續
.Busy Or .ReadyState <> 4 代表「判斷網頁是否還在忙碌」。(ReadyState 代碼4 表示網頁已跑完就緒)
以上,提供樓主參考囉~~
Der,misser1
dropit wrote:
但你可以參考一下我CODE的64~79行的部分,除了既有的判斷網頁是否開啟外,還寫了暫停機制
有幾個錯誤,您參考一下
一、第64行,寫錯了
二、
當使用.Open "get", url, false
.readyState = 4是不需要的,所以 do .... loop內的程式碼無作用
使用
.Open "get", url, true
就可使用.readyState = 4
三、
在使用false時,沒有所謂的暫停
在不管網站內容是否正確下,只有正常、錯誤,2種狀況
錯誤會停在.send那一行,所以需用on error來設陷
四、
因Application.Wait 特性,以秒為單位
等待時間加上現在時間秒數不足一秒時,基本上沒作用
最低0.5勉強可用
請把以下3個範例跑一遍,您就可以了解我在說什麼了,請參考
Sub test1()
Dim ttt As Double
ttt = Timer
Application.Wait DateAdd("s", 0.3, Now)
MsgBox Timer - ttt
MsgBox "Delay 0.3 test"
ttt = Timer
Call Delaytick(0.3)
MsgBox Timer - ttt
End Sub
Sub test2()
Dim web As Object, url As String
Set web = CreateObject("Microsoft.XMLHTTP")
url = "https://www.google.com.tw/?gws_rd=ssl"
For i = 1 To 2
MsgBox Choose(i, "false", "true") & " test"
web.Open "get", url, Choose(i, "false", "true")
web.send
Do Until web.readyState = 4
MsgBox "readyState check"
Loop
MsgBox Len(web.responsetext)
Next i
set web=nothing
End Sub
Sub test3()
Dim ttt As Double
ttt = Timer
If Application.Wait(Now + TimeValue("0:00:10")) Then MsgBox Timer - ttt
ttt = Timer
If Application.Wait(Now + TimeValue("0:00:10") / 2) Then MsgBox Timer - ttt
ttt = Timer
If Application.Wait(Now + TimeValue("0:00:5") / 2) Then MsgBox Timer - ttt
ttt = Timer
If Application.Wait(Now + TimeValue("0:00:1")) Then MsgBox Timer - ttt
ttt = Timer
If Application.Wait(Now + TimeValue("0:00:1") / 2) Then MsgBox Timer - ttt
End Sub
Sub Delaytick(setdelay As Single)
Dim StartTime As Double, NowTime As Double
StartTime = Timer * 100
setdelay = setdelay * 100
Do
NowTime = Timer * 100
DoEvents
Loop Until NowTime - StartTime > setdelay
End Sub
這篇雖然很多舊範例不能用了,但近期寫的都還算正常,有興趣請參考
https://www.mobile01.com/topicdetail.php?f=511&t=4737630
內文搜尋

X