利用excelvba在JavaScript网页中选择onchange值

利用excelvba在JavaScript网页中选择onchange值,javascript,excel,vba,web,onchange,Javascript,Excel,Vba,Web,Onchange,我对VBA非常陌生,我曾多次尝试使用Excel VBA在网站上选择值,但都不起作用。下面是我使用的代码 实际上,我不知道如何获取元素,因为它没有“id”或“name”标记 Sub-GetFinanceData() 将URL设置为字符串 URL=”http://stock.finance.sina.com.cn/hkstock/finance/00001.html" 设置myIE=CreateObject(“InternetExplorer.Application”) 和myIE在一起 .浏览网

我对VBA非常陌生,我曾多次尝试使用Excel VBA在网站上选择值,但都不起作用。下面是我使用的代码

实际上,我不知道如何获取元素,因为它没有“id”或“name”标记

Sub-GetFinanceData()
将URL设置为字符串
URL=”http://stock.finance.sina.com.cn/hkstock/finance/00001.html"
设置myIE=CreateObject(“InternetExplorer.Application”)
和myIE在一起
.浏览网址
.Visible=True
Do While.Busy=True或.readyState 4
环
多芬特
.Document.parentWindow.execScript“selectData(零);”,“JavaScript”
以

End Sub
事实上,通过HTML
名称或
id
对表单元素进行寻址有时是有利的,但在您的示例中,您可以使用getElementsByTagName()方法来寻址
选择
标记,即使它们没有名称或id

下面的代码将所有
选择
下拉列表设置为“零”。我做了短暂的测试,效果很好

Sub GetFinanceData()
    Dim URL As String
    URL = "http://stock.finance.sina.com.cn/hkstock/finance/00001.html"

    Set myIE = CreateObject("InternetExplorer.Application")
    With myIE
        .navigate URL
        .Visible = True

        Do While .Busy = True Or .readyState <> 4
            Loop
        DoEvents

        Set selectItems = myIE.document.getElementsByTagName("select")
        For Each i In selectItems
            i.Value = "zero"
            i.FireEvent ("onchange")
        Next i
    End With
End Sub
Sub-GetFinanceData()
将URL设置为字符串
URL=”http://stock.finance.sina.com.cn/hkstock/finance/00001.html"
设置myIE=CreateObject(“InternetExplorer.Application”)
和myIE在一起
.浏览网址
.Visible=True
Do While.Busy=True或.readyState 4
环
多芬特
设置selectItems=myIE.document.getElementsByTagName(“选择”)
对于selectItems中的每个i
i、 Value=“零”
i、 FireEvent(“onchange”)
接下来我
以
端接头

CSS选择器:

使用CSS选择器定位
选项[value='zero']

也就是说,
选项
标记具有属性
,值为
“零”
<代码>“[]”
表示属性


CSS查询:


VBA:

使用
querySelector
方法
document
应用选择器,即

然后简单地选择

ie.document.querySelector("option[value='zero']").Selected = True
如果需要触发其他事件触发:

ie.document.querySelector("option[value='zero']").FireEvent "onchange"

您好,谢谢您的快速响应,选择框中的单元格值已更改为零,但我发现表中的数据没有随之更改,这是由于“单击操作”之类的原因吗?请帮我查一下好吗?我不能发布屏幕截图,因为我在这个论坛上没有足够的声誉。嘿。说得好。设置“零”值后,需要向代码中添加
i.firevent(“onchange”)
。我已在解决方案中对其进行了更新。现在数字也在更新。对你有用吗?哇,太好了,有用了!你真是个天才,伙计~太酷了!我真的很佩服你,哈哈,我已经为此奋斗了几天,好吧,下一步我应该开始研究如何将这些数据提取到excel。这里有没有选择您的答案作为最佳答案的按钮?我很乐意。在我的答案的第一段左边应该有一个“检查”符号,点击它,答案将被标记为选中。谢谢对于您的下一个挑战,请先阅读HTML代码,我认为在数据表的标记中有一些
id
s。您好,我发现下载到excel中的数据没有完全更改,我认为这是因为我在单击按钮和开始下载之间使用了此“Do While.Busy:DoEvents:Loop”代码。你能告诉我这是否会影响网站的正常运行吗?