Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 正在填写web表单字段,但网页无法检测文本_Excel_Vba - Fatal编程技术网

Excel 正在填写web表单字段,但网页无法检测文本

Excel 正在填写web表单字段,但网页无法检测文本,excel,vba,Excel,Vba,我正在使用VBA填写web表单,我可以在输入框中填写文本,但网页仍然无法检测文本并显示错误: “错误:必填字段-请提供答案” 看起来有一些AngularJS在后台运行,它无法检测我的VBA中输入的文本。任何帮助都将不胜感激 首先,在objIE.Navigate URL之后,您应该等待网站完全加载并且IE准备就绪。这是通过以下步骤完成的: objIE.Navigate URL 'this needs some time but VBA will continue excecuting the ne

我正在使用VBA填写web表单,我可以在输入框中填写文本,但网页仍然无法检测文本并显示错误: “错误:必填字段-请提供答案”

看起来有一些AngularJS在后台运行,它无法检测我的VBA中输入的文本。任何帮助都将不胜感激


首先,在
objIE.Navigate URL
之后,您应该等待网站完全加载并且IE准备就绪。这是通过以下步骤完成的:

objIE.Navigate URL 'this needs some time but VBA will continue excecuting the next statement qickly

Const READYSTATE_COMPLETE As Integer = 4
Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE
    DoEvents
Loop

'now IE is ready and the page is loaded.
这将尝试访问字段
student.firstName
,如果该字段不存在,则会出错。我们使用下一步错误恢复时的
来抑制错误消息,并跳回
TryAgain
,直到找到它

请注意,这有一个缺点:如果加载此站点时出现问题,它将陷入此循环中。所以我建议获得一个定时取消标准,比如如果这需要一分钟以上的时间,取消它并抛出一条错误消息

类似于以下的方法应该可以工作:

Option Explicit

Sub test()
    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True

    Dim URL As String
    URL = "https://npc.collegeboard.org/app/dartmouth/start"

    objIE.Navigate URL

    Const READYSTATE_COMPLETE As Integer = 4
    Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Loop

    Dim Obj As Object
    Do While Obj Is Nothing
        On Error Resume Next
        Set Obj = objIE.Document.getElementById("student.firstName")
        On Error GoTo 0
    Loop


    objIE.Document.getElementById("student.firstName").Focus
    objIE.Document.getElementById("student.firstName").Value = "Tom"
End Sub
选项显式
子测试()
模糊对象
Set objIE=CreateObject(“InternetExplorer.Application”)
objIE.Visible=True
将URL设置为字符串
URL=”https://npc.collegeboard.org/app/dartmouth/start"
导航URL
常量READYSTATE_完成为整数=4
在objIE.Busy或objIE.ReadyState ReadyState\u完成时执行此操作
多芬特
环
作为对象的Dim Obj
当Obj什么都不是的时候做
出错时继续下一步
Set Obj=objIE.Document.getElementById(“student.firstName”)
错误转到0
环
objIE.Document.getElementById(“student.firstName”).Focus
objIE.Document.getElementById(“student.firstName”).Value=“Tom”
端接头

首先,在
objIE.Navigate URL
之后,您应该等待网站完全加载并且IE准备就绪。这是通过以下步骤完成的:

objIE.Navigate URL 'this needs some time but VBA will continue excecuting the next statement qickly

Const READYSTATE_COMPLETE As Integer = 4
Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE
    DoEvents
Loop

'now IE is ready and the page is loaded.
这将尝试访问字段
student.firstName
,如果该字段不存在,则会出错。我们使用下一步错误恢复时的
来抑制错误消息,并跳回
TryAgain
,直到找到它

请注意,这有一个缺点:如果加载此站点时出现问题,它将陷入此循环中。所以我建议获得一个定时取消标准,比如如果这需要一分钟以上的时间,取消它并抛出一条错误消息

类似于以下的方法应该可以工作:

Option Explicit

Sub test()
    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True

    Dim URL As String
    URL = "https://npc.collegeboard.org/app/dartmouth/start"

    objIE.Navigate URL

    Const READYSTATE_COMPLETE As Integer = 4
    Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Loop

    Dim Obj As Object
    Do While Obj Is Nothing
        On Error Resume Next
        Set Obj = objIE.Document.getElementById("student.firstName")
        On Error GoTo 0
    Loop


    objIE.Document.getElementById("student.firstName").Focus
    objIE.Document.getElementById("student.firstName").Value = "Tom"
End Sub
选项显式
子测试()
模糊对象
Set objIE=CreateObject(“InternetExplorer.Application”)
objIE.Visible=True
将URL设置为字符串
URL=”https://npc.collegeboard.org/app/dartmouth/start"
导航URL
常量READYSTATE_完成为整数=4
在objIE.Busy或objIE.ReadyState ReadyState\u完成时执行此操作
多芬特
环
作为对象的Dim Obj
当Obj什么都不是的时候做
出错时继续下一步
Set Obj=objIE.Document.getElementById(“student.firstName”)
错误转到0
环
objIE.Document.getElementById(“student.firstName”).Focus
objIE.Document.getElementById(“student.firstName”).Value=“Tom”
端接头

Thank@Pᴇʜ. 我已经在做这一切了(并没有包括这一点,以使其不那么冗长)-因此,在我开始填写表单之前,页面已完全加载。我的文本在文本框中填充,但我仍然在页面上看到错误。让我在图片中加入这个问题。@user1771840显然,该站点背后的JavaScript触发了一个keydown事件。您可以通过在将焦点设置到该输入框后发送一个键来欺骗它:在
.focus
行之后添加
Application.SendKeys”“
,在填充数据之前向该框发送一个空格。谢谢@Pᴇʜ. 我已经在做这一切了(并没有包括这一点,以使其不那么冗长)-因此,在我开始填写表单之前,页面已完全加载。我的文本在文本框中填充,但我仍然在页面上看到错误。让我在图片中加入这个问题。@user1771840显然,该站点背后的JavaScript触发了一个keydown事件。您可以通过在将焦点设置到该输入框后发送一个键来实现这一点:在
.focus
行之后添加
Application.SendKeys”“
,在向该框中填充数据之前发送一个空格。