我编写了一些VBA脚本来加载网页,然后将整个html内容复制到一个字符串中,然后从该字符串中选择特定数据。本质上,我搜索铁路时刻表,然后复制5个旅程的详细信息(出发时间,交汇处,旅程时间和费用)
我将上面的脚本排序为进行一次搜索,但我现在想要循环它并运行大约300次搜索。我发现的问题是脚本不会等待网页打开,因此返回的字符串为空,实际上没有返回任何内容。
我需要做的是加载一个地址,等待页面加载,然后继续脚本。你有什么建议吗?我已经搜索了很多而且无法排序,我已经在很多地方试过Application.Wait
而且还没有进一步。
我正在使用的代码如下:
Sub CreateIE()
Dim tOLEobject As OLEobject
Dim NRADDRESS As String
NRADDRESS = Range("h11")
On Error Resume Next
Worksheets("Sheet1").Shapes.Range(Array("WebBrow")).Delete
Set tOLEobject = Worksheets("Sheet1").OLEObjects.Add(ClassType:="Shell.Explorer.2",Link:=False, _
DisplayAsIcon:=False, Left:=0, Top:=15, Width:=912, Height:=345)
For Each tOLEobject In Worksheets("Sheet1").OLEObjects
If tOLEobject.Name = "WebBrowser1" Then
With tOLEobject
.Left = 570
.Top = 1
.Width = 510
.Height = 400
.Name = "WebBrow"
End With
With tOLEobject.Object
.Silent = True
.MenuBar = False
.AddressBar = False
.Navigate NRADDRESS
End With
End If
Next tOLEobject
Sheets("Sheet2").Activate
Sheets("Sheet1").Activate
Call ReturnText
End Sub
NRADDRESS
是一个由许多不同参数(来源,目的地,日期和时间)组成的网址
“Call ReturnText”是我用来将网站HTML复制到字符串中并提取我想要的内容的脚本。
答案 0 :(得分:1)
在这种情况下,您可以尝试这样的事情:
Set objIE = CreateObject("InternetExplorer.Application")
objIE.navigate strURL
Do While objIE.readyState <> 4 And objIE.Busy
DoEvents
Loop
我认为,需要引用Microsoft Internet Controls。
答案 1 :(得分:0)
当我第一次开始使用VBA加载网页时,我也使用了IE对象,但后来发现它创建了我不需要的各种复杂功能,而我真正想要的只是下载文件。现在我总是使用URLDownloadToFile。
可以在这里找到它的一个很好的例子: