HTML/VBA下拉菜单

HTML/VBA下拉菜单,html,excel,vba,drop-down-menu,Html,Excel,Vba,Drop Down Menu,我对VBA和HTML例程有点小问题。我必须从链接中选择Sort by:下拉菜单并选择Leagues项目。我不能通过VBA来做这件事 这是我写的代码 Sub Scarica() Dim IE As New SHDocVw.InternetExplorer Dim HTMLDoc As MSHTML.HTMLDocument Dim HTMLDoc1 As MSHTML.HTMLDocument Dim Dropdowns As MSHTML.IHTMLElement Dim post As MSH

我对VBA和HTML例程有点小问题。我必须从链接中选择Sort by:下拉菜单并选择Leagues项目。我不能通过VBA来做这件事

这是我写的代码

Sub Scarica()
Dim IE As New SHDocVw.InternetExplorer
Dim HTMLDoc As MSHTML.HTMLDocument
Dim HTMLDoc1 As MSHTML.HTMLDocument
Dim Dropdowns As MSHTML.IHTMLElement
Dim post As MSHTML.IHTMLElement
Dim Elem As MSHTML.IHTMLElement

Application.StatusBar = "Download Elenco Campionati odierni in corso..."
Application.ScreenUpdating = False
Application.Calculation = xlManual


IE.Visible = True
IE.navigate "https://www.betexplorer.com/next/soccer/"

Do While IE.readyState <> READYSTATE_COMPLETE
Loop

'==================================================
' THIS IS THE PART THAT I CAN'T WRITE
'==================================================

Set HTMLDoc = IE.document
Set post = HTMLDoc.getElementById("wrap-header__list__item.semilong")




    Do While IE.readyState <> READYSTATE_COMPLETE
    Loop
'==================================================
'==================================================

这是我的第一条消息,我无法插入网站的HTML代码。

您可以通过将父选项的id与相应子选项标记的for the value属性相结合来隔离正确的下拉项进行选择。父select需要一个onchange事件,您需要附加并分派该事件

按id的父div和按值的子选项:

事件处理程序:


@QHarr解释的方式非常完美。或者,您也可以使用现有代码执行类似的操作

IE.Visible = True
IE.navigate "https://www.betexplorer.com/next/soccer/"

Do While IE.readyState <> READYSTATE_COMPLETE
Loop

Set HTMLDoc = IE.document
With HTMLDoc.getElementById("next-filter-sort").all(1).all(0)
    .Focus
    .Value = "2" '"Leagues"
End With

很抱歉,这两个代码都有效,但是当我尝试推断每个联赛的名称时,它们是按开球时间加载的,而不是按联赛加载的? 我使用的代码是:

With IE
    .Visible = True
    .navigate "https://www.betexplorer.com/next/soccer/"

    Do While .readyState <> READYSTATE_COMPLETE
    Loop

    .document.querySelector("#nr-all [value='2']").Selected = True

    Set evt = .document.createEvent("HTMLEvents")
    evt.initEvent "change", True, False
    .document.querySelector("#nr-all select").dispatchEvent evt

    Do While .readyState <> READYSTATE_COMPLETE
    Loop

    Set HTMLDoc = IE.document

End With



i = 9 'Riga di inizio copia dati
j = 0 'Colonna di inizio copia dati
范围A10:A1005.ClearContents的Pulisce la Zona dove saranno Incolati i dati

设置mycoll=HTMLDoc.getElementsByTagNameTABLE 对于mycoll中的每个myItm

    For Each trtr In myItm.Rows
        If trtr.classname = "js-tournament" Then
            inizio = InStr(trtr.innerHTML, "href=") + 6
            fine = InStr(trtr.innerHTML, "><i") - 1
            fedhtml = Trim(Mid(trtr.innerHTML, inizio, fine - inizio))
            campionato = Split(Replace(fedhtml, "/soccer/", ""), "/")
            campionato = Trim(campionato(1))
                Cells(i + 1, j + 1) = trtr.innerText
                Cells(i + 1, j + 1).Select
                Selection.RowHeight = 15
                i = i + 1
        End If
    Next trtr

下一个myItm

非常感谢您的解决方案更简单。没有你的帮助,我永远不会成功。非常感谢大家,非常欢迎你们。让我知道它是否如你所愿。请你能回答下面的问题吗?嗨,这应该作为一个新问题发布
    For Each trtr In myItm.Rows
        If trtr.classname = "js-tournament" Then
            inizio = InStr(trtr.innerHTML, "href=") + 6
            fine = InStr(trtr.innerHTML, "><i") - 1
            fedhtml = Trim(Mid(trtr.innerHTML, inizio, fine - inizio))
            campionato = Split(Replace(fedhtml, "/soccer/", ""), "/")
            campionato = Trim(campionato(1))
                Cells(i + 1, j + 1) = trtr.innerText
                Cells(i + 1, j + 1).Select
                Selection.RowHeight = 15
                i = i + 1
        End If
    Next trtr