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

时间:2017-11-29 12:59:33

标签: excel vba excel-vba loops 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个日期的列表。循环输入列表的最后日期。我正在尝试输入第一个日期并单击“提交”,然后等待页面加载并输入第二个日期,并在有空单元格时停止循环。

2 个答案:

答案 0 :(得分:0)

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

  

“然后等待页面加载并输入第二个日期”

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

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

答案 1 :(得分:0)

这不应该太难。我转到那个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和/或名称,然后将其拉入Excel中的工作表。我会留给你弄清楚那一部分。这将是一次很好的学习经历!!!