首先,謝謝stackoverflow用戶幫助我獲得一個城市(MSP)的正確代碼。但是,現在我正在嘗試循環併爲幾個城市提取數據。目前,只有MSP,SLC,LAX和ATL。我將需要稍後添加更多內容。另外,如果我需要移動位置,我可能每天從10-15個航班飛到40個航班,我知道這將變得非常慢。運行時錯誤91.試圖在一個子文件夾中循環移動多個值
無論如何,當試圖獲得幾個城市的飛行數據時,我必須不斷調整每個「For i = 0 To 40」,所以它不會給我一個運行時錯誤91.我已經總結到目前爲止,當msp被設置爲40時,slc需要位於「For i = 0 To 35」。當代碼使它成爲atl的路時,我找不到一個有效的數字,它將一路走下去直到最後一個循環,並給我那個錯誤。總而言之,我試圖用一個按鈕來拉動幾個城市的飛行數據,並且將不得不根據時間來組織數據(我仍然需要將am/pm轉換爲軍事時間和排序)。如果你嘗試編碼,它會給你msp和slc飛行數據,但不是atl(第67行= Doc.getElem ...)。之後我將不得不增加更多的城市。
Sub populateFlightInfo()
'declare variables
Dim Doc As HTMLDocument
Dim i As Integer, f As Integer, count As Integer
Dim cityPair As String
For q = 0 To 4
If q = 0 Then
cityPair = "MSP"
GoTo msp
ElseIf q = 1 Then
cityPair = "SLC"
GoTo slc
ElseIf q = 2 Then
cityPair = "ATL"
GoTo atl
Else
GoTo terminate
End If
msp:
'run internet explorer
Dim IE As New InternetExplorer
count = 0
IE.navigate "https://assistive.usablenet.com/tt/www.delta.com/flightinfo/viewFlightSchedules.action?departureAirportCode=bzn&flightDate=" _
& "2015-08-23" & "&arrivalAirportCode=" & cityPair
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE
Set Doc = IE.document
For i = 0 To 40
On Error GoTo second
a = Doc.getElementsByClassName("schedulesTableCell")(i)
Next
GoTo second
slc:
'run internet explorer
Dim IG As New InternetExplorer
count = 1
IG.navigate "https://assistive.usablenet.com/tt/www.delta.com/flightinfo/viewFlightSchedules.action?departureAirportCode=bzn&flightDate=" _
& "2015-08-23" & "&arrivalAirportCode=" & cityPair
Do
DoEvents
Loop Until IG.readyState = READYSTATE_COMPLETE
Set Doc = IG.document
For i = 0 To 35
On Error GoTo second
a = Doc.getElementsByClassName("schedulesTableCell")(i)
Next
GoTo second
atl:
'run internet explorer
Dim IY As New InternetExplorer
count = 2
IY.navigate "https://assistive.usablenet.com/tt/www.delta.com/flightinfo/viewFlightSchedules.action?departureAirportCode=bzn&flightDate=" _
& "2015-08-23" & "&arrivalAirportCode=" & cityPair
Do
DoEvents
Loop Until IY.readyState = READYSTATE_COMPLETE
Set Doc = IY.document
For i = 0 To 50
On Error GoTo second
a = Doc.getElementsByClassName("schedulesTableCell")(i)
Next
GoTo second
second:
offSet = 0
For r = 0 To (i/9) - 1
flt = Doc.getElementsByClassName("schedulesTableCell")((r * 9) + offSet).innerText
dep = Trim(Doc.getElementsByClassName("schedulesTableCell")((r * 9) + 2 + offSet).innerText)
cty = Doc.getElementsByClassName("schedulesTableCell")((r * 9) + 3 + offSet).innerText
Range("F35").End(xlUp).offSet(1, 0).Value = Right(Replace(flt, " *", ""), 6)
Range("F35").End(xlUp).offSet(0, 1).Value = Trim(Left(dep, 7))
Range("F35").End(xlUp).offSet(0, 2).Value = cty
If InStr(flt, Chr(42)) > 0 Then
offSet = offSet + 1
End If
Next r
If count = 0 Then
IE.Quit
ElseIf count = 1 Then
IG.Quit
ElseIf count = 2 Then
IY.Quit
Else
End If
Next q
terminate:
End Sub
而不是硬編碼您的循環,使用適當的計數器。另外,使用'GoTo'語句遠非最佳。請給我幾分鐘時間來提出一些改進建議。 – 2015-02-23 14:45:15
謝謝你的建議,我會開始玩一個櫃檯。 – Philip 2015-02-23 14:47:13
'.GetElementsByClassName'應該返回一個具有'.Count'屬性的集合,我想。你錯誤地使用'On Error Resume Next',也是:) – 2015-02-23 14:53:26