Vba createobject(“HTMLFILE”)上的行为非常奇怪!

Vba createobject(“HTMLFILE”)上的行为非常奇怪!,vba,excel,xmlhttprequest,createobject,Vba,Excel,Xmlhttprequest,Createobject,我不明白为什么我会有这种奇怪的行为! 当创建和分配htmlfile对象时,函数会返回一个空白对象(“nothing”),当我逐行运行代码时,它会自动运行,即使我没有按F8运行下一行。。。 它没有任何错误! 对可能发生的事情有什么想法吗 奇怪行为开始的行:Set-htmlObj=CreateObject(“HTMLFILE”) 公共函数XMLHTTP_请求(方法作为字符串,URL作为字符串,可选PostData作为字符串,可选StrCookie作为字符串)作为HTMLDocument Dim oX

我不明白为什么我会有这种奇怪的行为! 当创建和分配htmlfile对象时,函数会返回一个空白对象(“nothing”),当我逐行运行代码时,它会自动运行,即使我没有按F8运行下一行。。。 它没有任何错误! 对可能发生的事情有什么想法吗

奇怪行为开始的行:
Set-htmlObj=CreateObject(“HTMLFILE”)

公共函数XMLHTTP_请求(方法作为字符串,URL作为字符串,可选PostData作为字符串,可选StrCookie作为字符串)作为HTMLDocument
Dim oXMLHTTP作为对象,htmlObj作为对象
设置oXMLHTTP=CreateObject(“MSXML2.XMLHTTP”)
oXMLHTTP.Open方法,URL,False
oXMLHTTP.setRequestHeader“内容类型”、“应用程序/x-www-form-urlencoded”
oXMLHTTP.setRequestHeader“Cookies”,StrCookie
关于错误转到错误处理程序
oXMLHTTP.send(PostData)
错误转到0
而oXMLHTTP.ReadyState 4:DoEvents:Wend
而oXMLHTTP.Status 200:DoEvents:Wend
设置htmlObj=CreateObject(“HTMLFILE”)
htmlObj.body.innerHTML=oXMLHTTP.responseText
设置XMLHTTP_请求=htmlObj
端函数

对函数的重复调用将导致对函数的多次调用。oXMLHTTP和htmlObj对象变量可以是静态的,也可以包括库引用,并且变量声明更改为早期绑定

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

  • 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
选项显式
副标题()
Debug.Print Left(XMLHTTP_请求(“http//example.com”).body.innerText,512)
端接头
公共函数XMLHTTP_请求(URL为字符串_
可选方法为String=“POST”_
可选的PostData为String=“”_
可选StrCookie作为字符串=”)作为HTMLDocument
Dim oXMLHTTP作为新的MSXML2.XMLHTTP60
Dim htmlObj作为新的HTMLDocument
oXMLHTTP.Open方法,URL,False
oXMLHTTP.setRequestHeader“内容类型”、“应用程序/x-www-form-urlencoded”
oXMLHTTP.setRequestHeader“Cookies”,StrCookie
oXMLHTTP.send PostData
如果oXMLHTTP.Status为200,则退出函数
htmlObj.body.innerHTML=oXMLHTTP.responseText
设置XMLHTTP_请求=htmlObj
端函数

运行
main()
子过程将把网页文本的前512个字符输出到即时窗口([Ctrl]+G)。

超标记文本语言?@pnuts:好的,删除它。@jeped Yes,HTMLDocument。如果我不清楚,我深表歉意。特别是,标题中有HMTLFILE,而不是HTMLFILE。您选择不包含Microsoft XML 6.0和Microsoft HTML对象库引用并使用早期绑定是否有原因?没有静态对象变量的后期绑定会在重复调用函数时显著降低速度。
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