Excel VBA循环在网页中输入数据

Excel VBA loop to input data in webpage

我已经阅读了很多文章并且能够从 excel 向网页输入数据。现在我正在尝试使用循环,因为我必须在同一页中输入数据 10 到 50 次。

这是代码

Sub vfcp()

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Top = 100
objIE.Left = 100
objIE.Width = 800
objIE.Height = 800
objIE.AddressBar = 1
objIE.StatusBar = 1
objIE.Toolbar = 1
objIE.Visible = True

Dim Input

Range("A2").Select

objIE.Navigate ("https://www.askebsa.dol.gov/VFCPCalculator/WebCalculator.aspx")

Do Until Selection.Offset(0, 0).Value = ""

  If objIE.ReadyState = 4 Then
  Input = Selection.Offset(0, 2).Value

  objIE.document.GetElementByID("_ctl0_MainContent_txtPrincipal").Value = Input

  objIE.document.GetElementByID("_ctl0_MainContent_cmdCalculate").Click

  Selection.Offset(1, 0).Select

  End If

Loop
End Sub

此代码中的问题是,我有一个包含 10 个日期的列表。循环输入列表的最后日期。我正在尝试输入第一个日期并单击提交,然后等待页面加载并输入第二个日期,如果有空单元格则停止循环。

输入日期的代码在哪里?没有它们你无法点击。

"then wait for the page to load and input the second date"

您可以通过在 End If 和 Loop 行之间插入以下内容来实现此目的。

    'Allows IE to load
    While objIE.ReadyState <> 4
        DoEvents
    Wend

这应该不会太难。我去了那个 URL,按 F12 查看网站背后的代码,并开始搜索适当的 ID 名称('Principal:'、'Loss Date:' 等)。就是这样。 运行 查看工作版本的脚本。哦,是的,在 运行 代码之前设置对 'Microsoft Internet Controls' 的引用。

Sub TryThis()

Dim ie As SHDocVw.InternetExplorer
Set ie = New SHDocVw.InternetExplorer
ie.Visible = True
ie.Navigate "https://www.askebsa.dol.gov/VFCPCalculator/WebCalculator.aspx"

Do
DoEvents
Loop Until ie.readystate = 4
'ie READYSTATE has 5 different status codes, here we are using status 4:

Call ie.Document.GetElementByID("_ctl0_MainContent_txtPrincipal").SetAttribute("value", "100000")
Call ie.Document.GetElementByID("_ctl0_MainContent_txtLossDateMonth").SetAttribute("value", "01")
Call ie.Document.GetElementByID("_ctl0_MainContent_txtLossDateDay").SetAttribute("value", "01")
Call ie.Document.GetElementByID("_ctl0_MainContent_txtLossDateYear").SetAttribute("value", "2016")

Call ie.Document.GetElementByID("_ctl0_MainContent_txtRecoveryDateMonth").SetAttribute("value", "01")
Call ie.Document.GetElementByID("_ctl0_MainContent_txtRecoveryDateDay").SetAttribute("value", "01")
Call ie.Document.GetElementByID("_ctl0_MainContent_txtRecoveryDateYear").SetAttribute("value", "2017")

Call ie.Document.GetElementByID("_ctl0_MainContent_txtFinalPaymentMonth").SetAttribute("value", "12")
Call ie.Document.GetElementByID("_ctl0_MainContent_txtFinalPaymentDay").SetAttribute("value", "30")
Call ie.Document.GetElementByID("_ctl0_MainContent_txtFinalPaymentYear").SetAttribute("value", "2017")

'to find the "<input……/>" tag hyper link and to click the button
Set AllInputs = ie.Document.getelementsbytagname("input") 'you can use any tagname as you wish
    For Each hyper_link In AllInputs
        If hyper_link.Name = "_ctl0:MainContent:cmdCalculate" Then 'you can use .name, .id etc
            hyper_link.Click
            Exit For
        End If
    Next
Do

DoEvents
Loop Until ie.readystate = 3
Do

DoEvents
Loop Until ie.readystate = 4


End Sub

如果你想抓取结果,刷新 URL 并按照我上面的描述进行操作:F12,搜索相关 ID and/or 名称,并将它们拉入工作表中Excel。我会留给你弄清楚那部分。这将是一次很好的学习经历!!!