createobject("HTMLFILE") 的行为非常奇怪!
VERY strange behavior on createobject("HTMLFILE")!
我不明白为什么我会出现这种奇怪的行为!
在创建和分配 htmlfile 对象时,该函数返回一个空白对象 ("nothing"),当我逐行 运行 宁代码时,即使我不这样做,它也会自动 运行s t 按 F8 到 运行 下一行...
它没有给出任何错误!
关于可能发生的事情有什么想法吗?
异常行为开始的行:Set htmlObj = CreateObject("HTMLFILE")
Public Function XMLHTTP_Request(Method As String, URL As String, Optional PostData As String, Optional StrCookie As String) As HTMLDocument
Dim oXMLHTTP As Object, htmlObj as object
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
oXMLHTTP.Open Method, URL, False
oXMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oXMLHTTP.setRequestHeader "Cookies", StrCookie
On Error GoTo ErrorHandler
oXMLHTTP.send (PostData)
On Error GoTo 0
While oXMLHTTP.ReadyState <> 4: DoEvents: Wend
While oXMLHTTP.Status <> 200: DoEvents: Wend
Set htmlObj = CreateObject("HTMLFILE")
htmlObj.body.innerHTML = oXMLHTTP.responseText
Set XMLHTTP_Request = htmlObj
End Function
重复调用该函数将导致多次调用 CreateObject function。 oXMLHTTP 和 htmlObj 对象变量可以是静态的,或者可以包含库引用,并且变量声明更改为早期绑定。
早期绑定要求通过 VBE 的工具 ► 引用命令添加以下非默认库引用。
- 微软HTML对象库
- Microsoft Internet 控件
- Microsoft XML 6.0(您自己的版本可能略有不同)。
模块 1 代码 sheet:
Option Explicit
Sub main()
Debug.Print Left(XMLHTTP_Request("http//example.com").body.innerText, 512)
End Sub
Public Function XMLHTTP_Request(URL As String, _
Optional Method As String = "POST", _
Optional PostData As String = "", _
Optional StrCookie As String = "") As HTMLDocument
Dim oXMLHTTP As New MSXML2.XMLHTTP60
Dim htmlObj As New HTMLDocument
oXMLHTTP.Open Method, URL, False
oXMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oXMLHTTP.setRequestHeader "Cookies", StrCookie
oXMLHTTP.send PostData
If oXMLHTTP.Status <> 200 Then Exit Function
htmlObj.body.innerHTML = oXMLHTTP.responseText
Set XMLHTTP_Request = htmlObj
End Function
运行 main()
子过程将网页文本的前 512 个字符输出到立即 window ([Ctrl]+G).
我不明白为什么我会出现这种奇怪的行为! 在创建和分配 htmlfile 对象时,该函数返回一个空白对象 ("nothing"),当我逐行 运行 宁代码时,即使我不这样做,它也会自动 运行s t 按 F8 到 运行 下一行... 它没有给出任何错误! 关于可能发生的事情有什么想法吗?
异常行为开始的行:Set htmlObj = CreateObject("HTMLFILE")
Public Function XMLHTTP_Request(Method As String, URL As String, Optional PostData As String, Optional StrCookie As String) As HTMLDocument
Dim oXMLHTTP As Object, htmlObj as object
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
oXMLHTTP.Open Method, URL, False
oXMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oXMLHTTP.setRequestHeader "Cookies", StrCookie
On Error GoTo ErrorHandler
oXMLHTTP.send (PostData)
On Error GoTo 0
While oXMLHTTP.ReadyState <> 4: DoEvents: Wend
While oXMLHTTP.Status <> 200: DoEvents: Wend
Set htmlObj = CreateObject("HTMLFILE")
htmlObj.body.innerHTML = oXMLHTTP.responseText
Set XMLHTTP_Request = htmlObj
End Function
重复调用该函数将导致多次调用 CreateObject function。 oXMLHTTP 和 htmlObj 对象变量可以是静态的,或者可以包含库引用,并且变量声明更改为早期绑定。
早期绑定要求通过 VBE 的工具 ► 引用命令添加以下非默认库引用。
- 微软HTML对象库
- Microsoft Internet 控件
- Microsoft XML 6.0(您自己的版本可能略有不同)。
模块 1 代码 sheet:
Option Explicit
Sub main()
Debug.Print Left(XMLHTTP_Request("http//example.com").body.innerText, 512)
End Sub
Public Function XMLHTTP_Request(URL As String, _
Optional Method As String = "POST", _
Optional PostData As String = "", _
Optional StrCookie As String = "") As HTMLDocument
Dim oXMLHTTP As New MSXML2.XMLHTTP60
Dim htmlObj As New HTMLDocument
oXMLHTTP.Open Method, URL, False
oXMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oXMLHTTP.setRequestHeader "Cookies", StrCookie
oXMLHTTP.send PostData
If oXMLHTTP.Status <> 200 Then Exit Function
htmlObj.body.innerHTML = oXMLHTTP.responseText
Set XMLHTTP_Request = htmlObj
End Function
运行 main()
子过程将网页文本的前 512 个字符输出到立即 window ([Ctrl]+G).