创建对象("HTMLFILE")上非常奇怪的行为!



我不明白为什么我会有这种奇怪的行为!当创建和分配htmlfile对象时,函数会返回一个空白对象("nothing"),当我逐行运行代码时,即使我没有按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函数的多次调用。oXMLHTTP和htmlObj对象变量可以是静态的,或者可以包括库引用,并且变量声明更改为Early Binding。

早期绑定要求通过VBE的工具添加以下非默认库引用►References命令。

  • Microsoft HTML对象库
  • Microsoft Internet控件
  • Microsoft XML 6.0(您自己的版本可能略有不同)

模块1代码表:

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个字符输出到即时窗口([Ctrl]+G)。

最新更新