VBA Excel单击href并填写表格

VBA Excel单击href并填写表格,excel,vba,Excel,Vba,我想用vba从网站上获取一些数据。 我想要的数据来自此网站: 我想要代码做的是用铅笔点击紫色条 这样屏幕就会显示过滤器,然后在过滤器中填充特定的时间范围。 完成此操作后,我希望获得显示的数据 我可以导航到该网站,然后单击紫色条,这样就会出现过滤屏幕。但是我不能填写日期 这是我目前掌握的代码: Dim IE As New SHDocVw.InternetExplorer Dim HTMLDoc As MSHTML.HTMLDocument Dim HTMLInput As MSHTML.I

我想用vba从网站上获取一些数据。 我想要的数据来自此网站:

我想要代码做的是用铅笔点击紫色条 这样屏幕就会显示过滤器,然后在过滤器中填充特定的时间范围。 完成此操作后,我希望获得显示的数据

我可以导航到该网站,然后单击紫色条,这样就会出现过滤屏幕。但是我不能填写日期 这是我目前掌握的代码:

    Dim IE As New SHDocVw.InternetExplorer
Dim HTMLDoc As MSHTML.HTMLDocument
Dim HTMLInput As MSHTML.IHTMLElement
Dim HTMLAs As MSHTML.IHTMLElementCollection
Dim HTMLA As MSHTML.IHTMLElement
Dim pastDate As MSHTML.IHTMLElement
Dim futuredate As MSHTML.IHTMLElement


IE.Visible = True
IE.Navigate "https://www.uitvoeringarbeidsvoorwaardenwetgeving.nl/mozard/!suite16.scherm1168?mGmr=66"

Do While IE.ReadyState <> READYSTATE_COMPLETE
Loop

Set HTMLDoc = IE.Document

Set HTMLAs = HTMLDoc.getElementsByTagName("a")

For Each HTMLA In HTMLAs
    'Debug.Print HTMLA.className, HTMLA.getAttribute("href"), HTMLA.getAttribute("rel"), HTMLA.innerText

    If HTMLA.getAttribute("href") = "https://www.uitvoeringarbeidsvoorwaardenwetgeving.nl/mozard/!suite16.scherm1168?mGmr=66#editmodal" Then
    HTMLA.Click
    Exit For
    End If

Next HTMLA
Do While IE.ReadyState <> 4 Or IE.Busy:
DoEvents: Loop

Set HTMLInput = HTMLDoc.getElementById("frm_FKMT_B931_542_823883_dva_id1")
HTMLInput.Value = "01-01-2020" 'THIS GIVES AN ERROR?
Dim IE作为新的SHDocVw.InternetExplorer
将HTMLDoc设置为MSHTML.HTMLDocument
将HTMLInput设置为MSHTML.IHTMLElement
将HTMLAs设置为MSHTML.IHTMLElementCollection
将HTMLA设置为MSHTML.IHTMLElement
将pastDate设置为MSHTML.IHTMLElement
将futuredate设置为MSHTML.IHTMLElement
可见=真实
即“导航”https://www.uitvoeringarbeidsvoorwaardenwetgeving.nl/mozard/!suite16.scherm1168?mGmr=66“
在IE.ReadyState ReadyState\u完成时执行此操作
环
设置HTMLDoc=IE.Document
设置HTMLAs=HTMLDoc.getElementsByTagName(“a”)
对于HTMLAs中的每个HTMLA
'Debug.Print HTMLA.className、HTMLA.getAttribute(“href”)、HTMLA.getAttribute(“rel”)、HTMLA.innerText
如果HTMLA.getAttribute(“href”)=“https://www.uitvoeringarbeidsvoorwaardenwetgeving.nl/mozard/!suite16.scherm1168?mGmr=66#editmodel“那么
HTMLA。点击
退出
如果结束
下一个HTMLA
在IE.ReadyState 4或IE.Busy时执行以下操作:
DoEvents:循环
设置HTMLInput=HTMLDoc.getElementById(“frm\u FKMT\u B931\u 542\u 823883\u dva\u id1”)
HTMLInput.Value=“01-01-2020”'这会给出一个错误吗?
最后一行代码给出了一个错误,我不明白为什么

这是我要更改其值的网站中的HTML代码:

<input name="FKMT_B931_542_823883_dva" class="datumveld form-control" id="frm_FKMT_B931_542_823883_dva_id1" type="text" pattern="(0[1-9]|1[0-9]|2[0-9]|3[01]).(0[1-9]|1[012]).[0-9]{4}">

感谢并为这个不公平或问得不好的问题感到抱歉,如果你们还需要什么,请随时提问


谢谢

这是填充第一个日期字段的示例。IDs似乎不太稳定。
注意:输入的日期有一个模式
pattern=“(0[1-9]| 1[0-9]| 2[0-9]| 3[01])(0[1-9]| 1[012])[0-9]{4}”

有一些html事件。我不知道是否有必要触发它们以使对话真正起作用

你检查过这个页面在IE中是否工作了吗

Sub OpenAndFillForm()

Dim browser As Object
Dim url As String
Dim nodeToClick As Object
Dim nodeForm As Object
Dim nodeFirstDate As Object

  url = "https://www.uitvoeringarbeidsvoorwaardenwetgeving.nl/mozard/!suite16.scherm1168?mGmr=66"

  Set browser = CreateObject("internetexplorer.application")
  browser.Visible = True
  browser.navigate url
  Do Until browser.readyState = 4: DoEvents: Loop

  Set nodeToClick = browser.document.getElementByID("tabel2").getElementsByTagName("a")(0)
  nodeToClick.Click
  Application.Wait Now + TimeValue("00:00:02")

  Set nodeForm = browser.document.getElementByID("tabel12")
  Set nodeFirstDate = nodeForm.getElementsByClassName("datumveld")(0)
  nodeFirstDate.Value = "31-12-2019"
End Sub

第一个标记很简单:
Set e=IE.document.getElementByID(“tabel2”).GetElementsByTagName(“a”)(0)
下一行只是单击分隔的元素:
e.click
谢谢!我算出了点击部分,现在我无法在startdate事件中填写我想要的值,尽管它被设置为输入,我可以得到ID谢谢你的回答!我将尝试并检查它是否有效!该页面在IE中工作!你的代码成功了!但是我不明白为什么我的代码不起作用?你能解释一下这个值吗?就像我说的ID看起来不太稳定。这是您的代码frm\u FKMT\u B931\u 542\u 823883\u dva\u id1中的ID,这是“我的”html代码frm\u FKMT\u B931\u 542\u 823497\u dva\u id1中相同元素的ID。它们是不同的,因为服务器单独生成它们。所以你不能用它们来识别元素。每次你看到ID或css类的“神秘”名称时,不要相信。啊,非常感谢!一开始我不明白你说的ID不稳定是什么意思,但现在我明白了!:)谢谢你的帮助!如果我还有什么问题可以问你吗please@T.M.谢谢我是新来的,所以谢谢你的帮助!:)我还有一个问题,我正在从网站上获取数据,但是当你向下滚动时,网站会更新数据,所以我需要向下滚动等待,向下滚动等待,然后获取数据,现在有人知道如何进行此操作吗