我想使用VBA从网页上获取一个表,但我无法直接访问它,因为我需要从一个标签切换到另一个标签 . 问题依赖于网页的.aspx端(URL不会相应地发展) .
网址:http://www.morningstar.fr/fr/fundquickrank/default.aspx
Default page after clicking URL
Moving to "Long Terme" Tab - URL won't change
我已经设法构建了将表导出到Excel工作表的代码,但缺少“导航”部分 .
以下是关于点击“Long Terme Tab”按钮的HTML代码:
我的出发点在这里(ProcessHTMLPage进行表格刮擦):
Sub Browse_Morningstar()
Dim XMLPage As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
XMLPage.Open "GET", "http://www.morningstar.fr/fr/fundquickrank/default.aspx", False
XMLPage.send
HTMLDoc.body.innerHTML = XMLPage.responseText
ProcessHTMLPage HTMLDoc
End Sub
我想这个请求必须以某种方式更新 . 对不起,如果我不够准确,但我对这一切都有点新意 .
非常感谢!
3 回答
上面的代码直接导航到您想要的选项卡 . 尝试将它与您的代码结合起来导出表格,也许它会起作用 . ie.Visible = True只是为了确保你导航到正确的URL,但是一旦你看到它工作就把它弄错 . 希望能帮助到你!
如果您希望使用IE从该目标页面获取表格数据,那么这就是实现这一目标的一种方式 .
参考添加到库:
__doPostBack和onclick事件:
当您检查与选择主内容div栏相关联的HTML时,例如
Long Terme
,您可以看到与各个条形项目的onclick
事件关联的java脚本__doPostBack function .Observe the HTML in question:
引用上面的链接:
tldr;
在
ASP
的"olden"天中,通常必须有一个表单来捕获用户输入,然后创建其他页面以接受这些输入(GET
或POST
),验证,执行操作等 . 使用ASP.NET
,您可以在接受上述参数的服务器上声明控件,并在检查了值之后回发到同一页面 .第一个参数告诉您哪个控件被触发,第二个参数提供了附加信息,在这种情况下,它确定返回哪些选项卡信息 .
从上面我们可以看出
TabAction
是控件,并且其后面的数字对应于感兴趣的标签,例如2为Long Terme(为0 - 索引) .在VBA中,我们可以通过多种方式执行此JS函数,但我将使用:
这变为:
我将其重新编写为接受EVENTARGUMENT作为常量
OPTION_CHOSEN
,因此可以通过更改顶部的值来检索不同的选项卡 .执行该函数后,剩下一点时间来刷新页面,然后该表被
id
抓取:然后,表沿着行和列循环(列是沿着每行长度的表格单元格) .
Examples from page:
代码输出示例:
Full code:
References (VBE > Tools > References):