填写Internet Explorer输入框

时间:2014-12-15 12:17:28

标签: vba internet-explorer excel-vba inputbox excel

我读了很多关于我的问题的答案但不知怎的,如果我试图“模仿”我看到的东西,我仍然无法做我需要的。

问题非常简单:在打开的IE页面上填写一个输入框。

结果:代码卡在getelementbyid显示运行时错误424(需要对象)的行上。

Private Sub AddInfoFromIntranet()

Dim ie As Object

Set ie = CreateObject("internetexplorer.application")
Application.SendKeys "{ESC}" ' I need this to ignore a prompt

With ie
    .Visible = True
    .navigate "{here goes the address of my website}"
    Do Until Not .Busy And .readyState = 4
        DoEvents
    Loop
    .document.getelementbyid("Nachnamevalue").Value = "{here goes whar I want to insert}"
End With

Set ie = Nothing

End Sub

Internet Explorer库是自然导入的(否则“internetexplorer.application”将不起作用。

我很肯定我想填写的字段被称为“Nachnamevalue”,就像我今天早上在互联网上看到的那样。

我的网页的html代码(只有有趣的部分)如下所示:

<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
    '{here there are info on the style, which i'm gonna ignore}
</style>
</head>
<body bgcolor="#ffffcc"><table width="1000"><tbody><tr><td>
    <form name="Suchform" action="index.cfm" method="get" target="bottom_window">
    Nachname:
        <select name="Nachnamepulldown" class="font09px" onchange="wait_and_search()">  
            <option value="BEGINS_WITH">beginnt mit
            <option value="EQUAL">ist
            <option value="CONTAINS">enthält
        </option></select>
        <input name="Nachnamevalue" onkeyup="wait_and_search()" type="text" size="8">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

    Abteilung:
        <select name="Abteilungpulldown" class="font09px" onchange="wait_and_search()"> 
            <option value="BEGINS_WITH">beginnt mit
        <option value="EQUAL">ist
        <option value="CONTAINS">enthält
        </option></select>
        <input name="Abteilungvalue" onkeyup="wait_and_search()" type="text" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

        <input name="fuseaction" type="hidden" value="StdSearchResult">
        <input type="submit" value="suchen">
        <script language="JavaScript" type="text/JavaScript">
        document.Suchform.Nachnamevalue.focus();
        </script>
    </form>
</td></tr></tbody></table></body>
</html>

还有(我不知道它是否可以提供帮助)“嵌入式”javascript,每次在“Nachnamevalue”输入框中写入至少2个字符时,都会带来搜索结果。

我做错了什么?

编辑: 当我尝试逐步执行Sub时,我得到以下内容:

Set Doc = ie.document

?文件 [对象HTMLDocument] (在监视列表中,它是一个没有任何变量的对象)

3 个答案:

答案 0 :(得分:7)

GetElementById通过 id 属性获取元素,但"Nachnamevalue" name 的值属性。

使用名称:

.document.Forms("Suchform").Elements("Nachnamevalue").value = "xxx"

答案 1 :(得分:1)

这对我有用。该代码使用文件c:\Temp\page1.html中问题的HTML。

Option Explicit

' Add reference to Microsoft Internet Controls
' Add reference to Microsoft HTML Object Library

Sub AddInfoFromIntranet()

    Dim ie As SHDocVw.InternetExplorer
    Dim doc As MSHTML.HTMLDocument
    Dim elements As MSHTML.IHTMLElementCollection
    Dim nachnameValueInput As MSHTML.HTMLInputElement

    Set ie = New SHDocVw.InternetExplorer

    With ie
        .Visible = True
        .navigate "c:\Temp\page1.html"
        Do Until Not .Busy And .readyState = 4
            DoEvents
        Loop

        Set doc = .document
        Set elements = doc.getElementsByName("Nachnamevalue")

        If Not elements Is Nothing Then
            Set nachnameValueInput = elements(0)
            If Not nachnameValueInput Is Nothing Then _
                nachnameValueInput.Value = "{here goes whar I want to insert}"
        End If

        .Quit
    End With

    Set ie = Nothing

End Sub

要检查momonet上存在的所有输入元素的名称,请在您可以使用getElementsByTagName("input")的页面上执行VBA代码。

    Set elements = doc.getElementsByTagName("input")

    If Not elements Is Nothing Then
        Dim inputElement
        For Each inputElement In elements
            Debug.Print inputElement.Name
        Next inputElement
    End If

答案 2 :(得分:0)

您可以尝试循环所有输入,并根据需要选择一个输入:

Set Elements = IE.document.getelementsbytagname("Input")
For Each Element In Elements
    If Element.Name = "Nachnamevalue" Then
        Element.Value = {Here your value}
        Exit For
    End If
Next Element