我正在尝试使用VBA从invest.com上的多个页面中提取商品/股票价格并将其插入到Excel电子表格中。
以下代码是我一直在努力做单一价格的代码,在本例中为gold:
Sub Extractdatafromwebsite()
Dim ie As New InternetExplorer
Dim doc As HTMLDocument
ie.Visible = False
ie.navigate "http://uk.investing.com/commodities/gold"
Do
DoEvents
Loop Until ie.READYSTATE = READYSTATE_COMPLETE
Set doc = ie.document
output = doc.GetElementById("last_last").innerText
Range("A1").Value = output
ie.Quit
End Sub
但是,我需要来自多个网站的数据才能同时获得不同的价格。
我试着详细说明我所使用的代码,以下示例是我试图显示黄金和白银的价格,但是它只显示了A1和A1中的金价。 A2:
Sub Extractdatafromwebsite()
Dim ie As New InternetExplorer
Dim doc As HTMLDocument
ie.Visible = False
ie.navigate "http://uk.investing.com/commodities/gold"
Do
DoEvents
Loop Until ie.READYSTATE = READYSTATE_COMPLETE
Set doc = ie.document
output = doc.GetElementById("last_last").innerText
Range("A1").Value = output
ie.Quit
ie.navigate "http://uk.investing.com/commodities/silver"
Set doc = ie.document
output = doc.GetElementById("last_last").innerText
Range("A2").Value = output
ie.Quit
End Sub
有人可以帮我弄清楚如何让它在多个页面上工作吗?我试过搜索但是没有提出任何适合我需要的东西。
还有可能在收集数据的同时弹出一些类似“等待......”的内容吗?
由于
答案 0 :(得分:0)
我发现使用READYSTATE是不可靠的,因为文档有时没有完全加载 - 或者至少没有加载对象模型。
因此,我通常在尝试访问新的doc对象之前添加sleep命令和Doevents
这应该对你有用(正如@Dave所说,你不需要使用 var values = {"0,","1","2"};
var theids = JSON.stringify(values);
// Make an ajax call
$.ajax({
type: "POST",
url: "Page.aspx/Done",
contentType: "application/json; charset=utf-8",
data: {ids: theids },
dataType: "json",
success: function (result) {
alert('Alright, man!');
},
error: function (result) {
alert('Whoops :(');
}
});
)
IE.Quit