使用VBA将表格从web导入Excel

使用VBA将表格从web导入Excel,excel,javascript-events,web-scraping,vba,Excel,Javascript Events,Web Scraping,Vba,编写了一些基本的VBA连接到一个网站,输入该网站的用户名和密码,登录,然后复制一个表并粘贴到excel中。现在我意识到我的表格包含带有链接的图形。我不想复制前面提到的表,而是想单独跟踪这些链接,并将这些链接到的表复制到excel中 但是,web表中的这些图形不包含单独的直接超链接。我查看了网页源代码,其中包含Javascript。见下文 <a href="#" onclick="var a=function(){javascript:window.open('','ProcStatus'

编写了一些基本的VBA连接到一个网站,输入该网站的用户名和密码,登录,然后复制一个表并粘贴到excel中。现在我意识到我的表格包含带有链接的图形。我不想复制前面提到的表,而是想单独跟踪这些链接,并将这些链接到的表复制到excel中

但是,web表中的这些图形不包含单独的直接超链接。我查看了网页源代码,其中包含Javascript。见下文

 <a href="#" onclick="var a=function(){javascript:window.open('','ProcStatus','top=50,left=' +     (screen.width - 750) + ',width=700,height=500,resizable,status,scrollbars');};var b=function()    {if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('MainPage'),        {'j_id202:319:j_id208':'j_id202:319:j_id208'},'ProcStatus');}return false};return (a()==false) ?     false : b();"><img src="image.gif" alt="View Details" style="border: 0;" title="View Details" /></a>
我可以在源代码中看到这些调用的函数,请记住我对Javascript一无所知,我的VBA代码如何执行/打开这些链接,然后转到表中的第二行,再转到下一个链接?基本上,我如何填充onclick事件所需的变量,然后激活该超链接以打开新网页


然后表中的每个后续链接

您可以使用以下命令从VBA调用JavaScript函数:

Call ie.document.parentWindow.execScript("functionName()", "JavaScript")
在您的情况下,它看起来像:

Call ie.document.parentWindow.execScript("var a=function(){javascript:window.open('','ProcStatus','top=50,left=' +     (screen.width - 750) + ',width=700,height=500,resizable,status,scrollbars');};var b=function()    {if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('MainPage'),        {'j_id202:319:j_id208':'j_id202:319:j_id208'},'ProcStatus');}return false};return (a()==false) ?     false : b();", "JavaScript")
或者,也可以指示宏使用DOM方法单击链接。您必须仔细阅读源代码,以找出元素的确切位置,但一般来说,您的代码将遵循以下几行:

ie.document.getElementsByTagName("a")[3].click
其中3是元素数组的索引

你不需要了解很多javascript就可以有效地处理Web垃圾,但是了解一些基本的DOM方法会有所帮助

document.getElementsByTagName-查找具有给定标记名的元素,如table、a、td、tr、div等。 document.getElementsByName-查找具有给定名称的元素 document.getElementById-查找具有给定id的元素 element.innerText-返回元素的文本 element.innerHTML-返回元素的HTML element.click-单击元素 element.getAttributeattribute-返回给定属性的值,如href或style
我可能是太天真了,试图把你说的是我的解决方案的东西插入插件。它吐出了一个错误。为了让ExecScript执行上面传入的函数,我可能需要设置其他变量吗?我无法真正理解第二部分。源代码包含几个表,每个表大约有50行。我可以很容易地选择我想要的表,但除了复制它,我不确定接下来的步骤是什么?我正在执行的实际代码/javascript……是通用的吗?我不知道它想做什么?这对其他人来说很明显吗?是的,VBA并不喜欢javascript引入的所有额外字符。VBA将这些单引号作为注释分隔符读取。只需让宏单击元素可能会更好。学习如何使用DOM方法的最佳方法是打开Chrome javascript控制台Ctrl+Shift+J并尝试不同的代码片段。一旦你学会了一些基本的javascript,从网页抓取表格就很容易了。如果你给我发送你想要抓取的网站,我可以帮助你开始。当我在VBA中提取字符串时,看起来还可以。这些引文都是完整的。任何完全用双引号包装的东西通常都可以,并且被当作字符串处理。Console属性框看起来确实很有用,但我还是不知道它在告诉我什么。我从中提取的网站非常机密,并且有密码保护。我正试图用谷歌搜索类似的东西,但到目前为止没有太多的外观。截图有用吗?非常感谢您的帮助。或者,这是经过编辑的页面源代码。通知中名为“这是我需要的”的部分是我需要从中获取的链接