我读了很多关于我的问题的答案但不知怎的,如果我试图“模仿”我看到的东西,我仍然无法做我需要的。
问题非常简单:在打开的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">
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">
<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] (在监视列表中,它是一个没有任何变量的对象)
答案 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