Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 getElementById在VBA中不起作用,错误438_Excel_Vba_Getelementbyid - Fatal编程技术网

Excel getElementById在VBA中不起作用,错误438

Excel getElementById在VBA中不起作用,错误438,excel,vba,getelementbyid,Excel,Vba,Getelementbyid,我在VBA相对较新,我知道基本知识,但其他知识不多,我正在尝试设置一些代码,以便为我填写在线表单,但当我运行代码时,我遇到438错误: 对象不支持此属性或方法 当它到达 ie.document.getElementById ("q") 我已将HTML对象库和Microsoft internet控件添加到我的引用中。我看了很多在线论坛。我甚至将整个脚本直接复制并粘贴到VBA中。没有任何东西会使它使用getElementById。这是我的密码: Sub internetstuff() Dim i

我在VBA相对较新,我知道基本知识,但其他知识不多,我正在尝试设置一些代码,以便为我填写在线表单,但当我运行代码时,我遇到438错误:

对象不支持此属性或方法

当它到达

ie.document.getElementById ("q")
我已将HTML对象库和Microsoft internet控件添加到我的引用中。我看了很多在线论坛。我甚至将整个脚本直接复制并粘贴到VBA中。没有任何东西会使它使用getElementById。这是我的密码:

Sub internetstuff()

Dim ie As Object

Set ie = CreateObject("internetexplorer.application")

ie.Visible = True

ie.navigate ("https://www.google.com/")

Set searchbx = ie.document.getElementById("q")

searchbx.Value = "Howdy!"

End Sub
应该做的是,它应该打开InternetExplorer,转到Google,在搜索栏中填充Howdy!。 相反,它只打开google,然后我收到错误消息,它停止运行。

因为q不是ID,而是名称

您必须使用GetElementsByName并选择第一个元素

试试这个:

Sub internetstuff()

Dim ie As Object

Set ie = CreateObject("internetexplorer.application")

ie.Visible = True

ie.Navigate ("https://www.google.com/")

    Do Until ie.ReadyState >= 4
        DoEvents
    Loop


Set searchbx = ie.document.getElementsByName("q")(0)

searchbx.Value = "Howdy!"

End Sub
我还添加了一个等待事件,以防加载Google需要时间

结果:
更简洁有效的方法是使用querySelector返回name属性的第一个匹配项

Option Explicit
Public Sub internetstuff()
    Dim ie As Object
    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .Visible = True
        .Navigate2 "https://www.google.com/"
        While .Busy Or .readyState < 4: DoEvents: Wend
        .document.querySelector("[name=q]").Value = "Howdy"
         Stop '<delete me later
        .Quit
    End With
End Sub

你确定google.com有q ID吗?我做了一个快速搜索,但没有看到一个…但是,搜索框的名称为q,因此您可能希望使用getElementsByTagName=q并使用searchbx[0].Value=howdy…这可能有助于您学习,但您可以一直使用ie.navigatehttps://www.google.com/search?q=Howdy!, 否?在HTML元素中显示:name=q,我在youtube上观看了一段视频,视频中使用了这一功能。此外,我也尝试过其他网站和不同的ID,但无法让它工作。这可能是我设置的设置吗?您是否使用getElementByID作为名称?这仍然在set searchbx=ie.document.GetElementsByNameQ0行上产生错误我想知道我的计算机设置中是否有什么东西阻止我让它执行我想要的操作您确定已将其更改为Elements。。运行时438对象不支持此属性或方法这就是为什么我如此困惑的原因,@mikku,我已经复制并粘贴了其他代码,但它仍然无法在我的计算机上工作。当它到达queryselector行时,同样的错误。你的代码是有道理的,我知道它应该可以工作,但我认为我的计算机系统/设置中一定有某种东西阻止它工作。不过我很感谢你的帮助,@QHarryes,我试着在我的桌面上重做了一些类似的代码,结果成功了。我不知道为什么@QharrTry ie.document.parentWindow.execscript document.querySelector'[name=q]'.Value='Howdy';嗨,@QHarr,我一直在尝试一些不同的东西,问题肯定是我的电脑。我在我的桌面上做了一些代码,这是一个简单的机器人来填写一些在线表格,我把它发送到我的笔记本电脑上,但它在那里不起作用。谢谢你的帮助,如果我浪费了你的时间,很抱歉。一点也不。这些事情经常发生。有时使用internetexplorermedium并确保网站位于URL的白名单上。