VBA在线输入数据并提交表单

VBA在线输入数据并提交表单,vba,excel,Vba,Excel,我正在尝试使用VBA将数据从Excel提交到在线Web表单。问题发生在我试图选择和更新表单的*区域内。我尝试了各种选项(getelement-by-ID、name等),但都没有成功。我认为这个问题与确定适当的要素有关。我已经看到了关于在VBA中使用局部变量功能的建议,但我不确定如何使用该功能。我感觉有经验的人可以通过查看webiste上的源代码、使用VBA中的局部变量或其他一些技术,很快找到答案 表单设置为所有字段都是文本,我可以在线输入/提交数据,没有问题 提前感谢您的帮助/建议 Dim IE

我正在尝试使用VBA将数据从Excel提交到在线Web表单。问题发生在我试图选择和更新表单的*区域内。我尝试了各种选项(getelement-by-ID、name等),但都没有成功。我认为这个问题与确定适当的要素有关。我已经看到了关于在VBA中使用局部变量功能的建议,但我不确定如何使用该功能。我感觉有经验的人可以通过查看webiste上的源代码、使用VBA中的局部变量或其他一些技术,很快找到答案

表单设置为所有字段都是文本,我可以在线输入/提交数据,没有问题

提前感谢您的帮助/建议

Dim IE As Object

Sub submitFeedback3()
Application.ScreenUpdating = False

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "http://spreadsheetbootcamp.com/excel-efficiency-trainer-feedback/"

Application.StatusBar = "Submitting"
  ' Wait while IE loading...
 While IE.Busy
 DoEvents
 Wend
 **********************************************************************
 IE.Document.getElementById("Form_Attempts-1372643500")(0).Value = "1"
 IE.Document.getElementById("submit-1-1372643500")(0).Click
 **********************************************************************
 Application.StatusBar = "Form Submitted"
 IE.Quit
 Set IE = Nothing

Application.ScreenUpdating = True
End Sub
试试下面的代码

Dim IE As Object

Sub submitFeedback3()
    Application.ScreenUpdating = False

    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.Navigate "http://spreadsheetbootcamp.com/excel-efficiency-trainer-feedback/"

    Application.StatusBar = "Submitting"
    ' Wait while IE loading...
    While IE.Busy
        DoEvents
    Wend
    ' **********************************************************************
    delay 5
    IE.Document.getElementById("experience-1372700847").Value = "ddddd1"
    delay 5
    IE.Document.getElementById("Form_Time_Best-1372700847").Value = "ddddddddddd2"
    delay 5
    IE.Document.getElementById("submit-1-1372700847").Click
    '**********************************************************************
    Application.StatusBar = "Form Submitted"
    IE.Quit
    Set IE = Nothing

    Application.ScreenUpdating = True
End Sub

Private Sub delay(seconds As Long)
    Dim endTime As Date
    endTime = DateAdd("s", seconds, Now())
    Do While Now() < endTime
        DoEvents
    Loop
End Sub
Dim IE作为对象
子提交反馈3()
Application.ScreenUpdating=False
设置IE=CreateObject(“InternetExplorer.Application”)
可见=真实
即“导航”http://spreadsheetbootcamp.com/excel-efficiency-trainer-feedback/"
Application.StatusBar=“提交”
“等一下,我正在装货。。。
趁我忙
多芬特
温德
' **********************************************************************
延迟5
IE.Document.getElementById(“experience-1372700847”).Value=“DDD 1”
延迟5
IE.Document.getElementById(“Form\u Time\u Best-1372700847”).Value=“DDD 2”
延迟5
IE.Document.getElementById(“提交-1-1372700847”)。单击
'**********************************************************************
Application.StatusBar=“表单已提交”
即退出
设置IE=无
Application.ScreenUpdating=True
端接头
专用子延迟(秒长)
Dim endTime作为日期
endTime=DateAdd(“s”,秒,Now())
立即执行()
该页面在IE8中完全被破坏。您可以输入数据/提交吗?这是这个网页的唯一用途。我只看到十几个未标记的文本框和一个“提交”按钮。但是看看HTML,你最好尝试根据文本框的名称(看起来是常量)来填充文本框,而不是根据它们的Id(看起来有一个不断变化的数字后缀)来填充文本框。我假设数字部分是静态的。根据此线程,使用getelementsbyname可能实际上需要查找id:。我将尝试更改一些html编码。
IE.Document.formNameHere.inputNameHere.Value
应该可以工作。我对表单使用了不同的设置,使所有内容都能完美工作。谢谢大家的建议。我使用的是相同的代码。最后,它单击一个按钮导航到新页面。完成后,我无法访问新页面的元素。我可能会缺少什么。@Richa您应该确保页面已完成加载。我创建了一个简单的sub来帮助实现这一点:
sub-IEBusy(IE\u Object As Object)
在IE\u Object.Busy或IE\u Object.ReadyState 4执行事件时执行操作
循环
退出sub。然后使用
calliebusy(IE)
,等待页面完成加载就很简单了。