【问题标题】:VBA code to click on Excel icon from a webpage从网页单击 Excel 图标的 VBA 代码
【发布时间】:2021-10-01 14:38:29
【问题描述】:

我正在尝试自动单击 Excel 图标操作以使用 VBA 从以下链接下载 Excel 数据Financial Statement of a Firm

下面是那个 Excel 图标的 html 代码

<div class="fri nav-item-right">
           <a onclick="changPeriod(2);" class="red" id="hang_quy" style="cursor:pointer;">Hàng quý</a>"|"
           <a onclick="changPeriod(1);" id="hang_nam" style="cursor:pointer;" class="">Hàng năm</a>
           <span class="curp"><img src="/images/icon-excel.jpg" alt="#" id="divPoints"></span>
 </div>

下面的 VBA 代码旨在触发 Excel 图标点击动作。

    URL = "http://finance.tvsi.com.vn/Enterprises/FinancialStatements?symbol=AAA" ' & Range("TickerName")
Set objIE = CreateObject("InternetExplorer.Application")
ThisWorkbook.Activate
objIE.Visible = True
objIE.navigate URL

Do While objIE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

Set HTMLDoc = objIE.document
Set oHTML_Elements = HTMLDoc.getElementsByClassName("fri nav-item-right")

    For Each oHTML_Element In oHTML_Elements
        For Each oHTML_Element_Li In oHTML_Element.getElementsByTagName("span")
            oHTML_Element_Li.Children(0).Click
        Next
    Next

    Do While objIE.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop

     objIE.Quit

发生的情况是点击了 Web 元素标签名称“a”,而不是属于标签名称范围的 Excel 图标。

我在上面的代码中做错了什么?如果可能的话,请告诉我您对点击此 Excel 图标的想法。

感谢您阅读这篇文章,我期待收到您的建议。

最好的问候

BK

【问题讨论】:

    标签: html excel vba web web-scraping


    【解决方案1】:

    这是从该站点下载 excel 文件的有效方法之一。当您执行以下宏时,您应该会在眨眼之间下载文件。您可以稍后按照您想要的方式格式化单元格。

    顺便说一句,无论您是手动下载文件还是使用脚本下载文件,下载的 excel 文件一打开就会出现警告。但是,您可以忽略该警告并打开文件而不会出现任何问题。

    Sub DownloadExcel()
        Const URL$ = "http://finance.tvsi.com.vn/Enterprises/BangCanDoiKeToan?"
        Dim aBody As Variant, sPath$, params$
    
        params = "symbol=AAA&YearView=2021&period=2&donvi=1000000"
        
        With CreateObject("MSXML2.XMLHTTP")
            .Open "GET", URL & params, False
            .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36"
            .send
            aBody = .responseBody
            sPath = ThisWorkbook.Path & "\" & "output.xls"
        End With
        
        With CreateObject("ADODB.Stream")
            .Type = 1
            .Open
            .write aBody
            .SaveToFile sPath, 2
            .Close
        End With
    End Sub
    

    【讨论】:

    • 您好 SIM,非常感谢您对我的帖子的快速回复。代码就像魅力一样摇摆不定,我可以将代码与它们所属的行业或行业相匹配,以下载他们的数据。页面其他选项卡上的数据也可以通过对 URL$ 的小修改轻松下载。再次,非常感谢您在这方面的帮助。
    • 我正在尝试模仿您在 [link] (finance.tvsi.com.vn/Enterprises/…) [/link] 中下载 excel 图标的解决方案,但似乎不知道 URL 和 Params 字符串。你能帮忙吗?提前谢谢你
    • 我建议您创建一个新帖子并在此处放置一个链接。我将尝试解决您当前遇到的问题。谢谢。
    • 感谢 SIM 的愿意。新帖子在此链接 [链接] stackoverflow.com/questions/68520103/… 中,我期待您的回音。谢谢!
    • 您的链接帖子中已经有了一个很好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多