【问题标题】:Excel 2010/2013 VBA import Current Balance from WebsiteExcel 2010/2013 VBA 从网站导入当前余额
【发布时间】:2016-03-06 02:47:48
【问题描述】:

我对 VBA 非常陌生,而对 HTML 则更少。我想要做的是能够单击一个按钮并从网站检索当前余额。理想情况下,我想单击一个按钮,让它遍历所有信用卡链接并提取当前余额,但如果我能让它在一个站点上工作,我会很高兴。在过去的几天里,我一直在网上搜索,并且能够拼凑出我下面的内容。请原谅一些被注释掉的部分,因为我正在反复试验。任何帮助,如果是 5 岁的孩子可以理解的话,将不胜感激。

那么,我哪里做错了?谢谢!!

顺便说一句,我已经切换了以下两行和相关的“暗淡”,结果相同。 '此属性或方法不支持对象。'

With ieDoc
 .getElementsByClassName("amount").innerText
End With

'    dd = IE.document.getElementsByClassName("amount").innerText
 Sub CurrentBalance()

    Dim IE As Object
    Dim ieDoc As Object
    Dim dd As Variant 'IHTMLElementCollection
    ' Create InternetExplorer Object
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True

    ' Send the form data To URL As POST binary request
    IE.Navigate "https://www.discovercard.com"

    Do Until Not IE.Busy And IE.readyState = 4
        DoEvents
    Loop

    Set ieDoc = IE.document

    With ieDoc
     .getElementsByClassName("amount").innerText
    End With

'    dd = IE.document.getElementByClassName("amount")

    Range("B2").Value = ieDoc


' Clean up
    Set IE = Nothing
    Set objElement = Nothing
    Set objCollection = Nothing

    Application.StatusBar = ""
End Sub

抱歉,我应该添加 HTML 部分:

href="/cardmembersvcs/personalprofile/pp/MyProfilePage?ICMPGN=ACHOME_ACCTSUMM_PROFILE_TXT" title="Profile">Profile</a></li>
                    <!-- WT blank content -->
                </ul>
            </div>
        </div>
        <div class="card-balances">
            <ul>
                <li>Current Balance</li>
                <li class="amount">$910.74</li>

【问题讨论】:

  • 运行宏的机器上安装了哪个版本的 Internet Explorer? IE9是第一个支持getElementsByClassName的IE版本
  • 我可能错了,但是getElementsByClassName() 返回一个数组,不是吗?所以,必须像.getElementsByClassName("amount")[0].innerText 一样(或与.getElementsByClassName("amount")[nthElement].innerText 在循环中)......对不起,我对VB 不是很熟悉......
  • @ankzhet getElementsByClassName 返回一个 IHTMLElementCollection,因此语法略有不同 - .getElementsByClassName("amount")(0).innerText - 但您的一般观点是完全正确的
  • 嗨...谢谢你们俩。我正在使用 IE 11。我已经更接近了以下内容:dd = IE.document.getElementById("amount") 但不确定如何将其传递给 B2。我没有错误。什么都没有。
  • 如果你使用getElementById,那么你的html应该看起来像&lt;li id="amount"&gt;$910.74&lt;/li&gt;

标签: html excel vba import


【解决方案1】:

将此替换为您当前的代码(保持“Set ieDoc”行之前的所有内容相同):

Set ieDoc = IE.document

With ieDoc
    Set dd = .getElementsByClassName("amount")

    Range("B2").Value = dd(0).InnerText
End With

' Clean up
IE.Quit
Set ieDoc = Nothing
Set IE = Nothing

Application.StatusBar = ""

End Sub

这使用“getElementsByClassName”,因为给定的 HTML 没有任何 ID 为“amount”的元素。这应该返回一个集合,我们从中获取第一个项目(项目 0),然后将其 innerText 复制到单元格 B2。

您尝试访问的网站上似乎缺少任何形式的登录或导航。仅当您尝试下载的数据在 https://www.discovercard.com 页面上可见且无需您登录时,此代码才有效

【讨论】:

  • 嗨,barrowc,我得到了一个未在范围内设置的变量(“B2”).value = dd(0).InnerText 这是非常困难的东西,这个代码业务。哈哈
  • 哦,为了回答你的问题,我有一个应用程序可以让我登录网站,所以应该没有问题。
  • 我在"range("B2").value = dd(0).innertext" 行得到一个"Object variable or with variable not set"。不知道该怎么办。
  • Set dd = .getElementsByClassName("amount") 行之后,添加此行以显示检索到的元素数量:MsgBox "Number of elements found = " &amp; dd.length 报告找到的元素数量
  • 我得到:“找到的元素数 = 0”
猜你喜欢
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多