【问题标题】:Excel VBA - Click on sort button or select from dropdown list on IEExcel VBA - 单击排序按钮或从 IE 的下拉列表中选择
【发布时间】:2020-11-18 18:10:38
【问题描述】:

我正在尝试使用 VBA 在 html 中获取与会话“T”有关的一些数据。有两种方法可以做到这一点:

  1. 从“交易时段”下的下拉列表中选择“T”
  2. 点击标题“Session”并对数据进行排序

下面是代码,不起作用

Dim ie As Object
Dim dropdown As Object

  Set ie = CreateObject("InternetExplorer.Application")
      ie.Visible = True

    ie.navigate "https://www.sgx.com/derivatives/delayed-prices-futures?cc=AJ&category=fx"
        Do Until ie.readyState = 4: DoEvents: Loop
      
    Set dropdown = ie.Document.getElementsByClassName("sgx-input-control sgx-input-select-filter")(2)
        dropdown.Focus
        dropdown.selectedIndex = 1    *'Error Msg "Object doesn't support this property or method"*
        dropdown.FireEvent ("onchange")

  ie.Quit

另外,我还尝试了方法2,使用以下几行,但没有任何反应(列表未排序但也没有错误):

ie.Document.getElementsByClassName("sgx-table-header-wrapper")(0).Click

我是编码新手,如果有人能帮助我,我将不胜感激。谢谢。

【问题讨论】:

  • 您尝试设置值的元素是只读的。它也不是实际的选择下拉菜单。因此无法设置其值或触发更改事件。当用户单击该元素时,它有一个 css 类 isactive,但源代码中没有 HTML 代码。因此,由于这个原因,很难从下拉列表中选择 T 并更新数据。如果可能的话,请尝试使用 VBA 代码单击一次向下箭头对 T 值数据进行排序。
  • 谢谢您的解释,我尝试使用VBA点击向下箭头对T值数据进行排序,但是点击标题时没有任何反应。
  • 很难对网站上的表格进行排序。如果您尝试复制表格数据,则可以先复制,然后在将数据粘贴到 Excel 后对数据进行排序。这可以解决上述问题。
  • 网页只允许下载前 26 行,我将数据粘贴到 Excel 后排序意味着我只会得到 13 行有用的数据(因为我不需要 T+1)这不是对我来说够多的了。因此,我需要在下载数据之前进行排序。我尝试使用 Chrome 而不是 IE 来使用以下代码对数据进行排序:ie.FindElementByClass("sgx-table-header-sort-button").Click。效果很好,但是我在 Excel 中刮取行和列中的数据时遇到了问题。
  • 我建议尝试使用 Selenium Web 驱动程序进行测试。然后尝试单击向下箭头对数据进行排序。看看它是否工作。 selenium.dev/documentation/en/webdriver

标签: excel vba internet-explorer automation dropdown


【解决方案1】:

使用getelementsbyname

ie.document.getelementsbyname("trading-session")(1).Value = "T"

您可以通过右键单击下拉菜单并选择“检查元素”来获取名称trading-session

此外,由于交易时段现在只有“T”,那么使用该标题对其进行排序没有意义吗?

【讨论】:

  • 感谢您的回复。您的代码暂时将“交易时段”的值从“全部”更改为“T”,但数据没有改变。
  • 您说得对,如果我可以将交易时段更改为“T”,我就不需要对标题进行排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多