【问题标题】:VERY strange behavior on createobject("HTMLFILE")!createobject("HTMLFILE") 的行为非常奇怪!
【发布时间】:2016-12-04 11:04:27
【问题描述】:

我不明白为什么会出现这种奇怪的行为! 创建和分配 htmlfile 对象时,该函数返回一个空白对象(“无”),当我逐行运行代码时,即使我不按 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

【问题讨论】:

  • 超标记文本语言 ?
  • @pnuts:好的,删除它。
  • @Jeeped 是的,HTMLDocument。
  • 如果我遇到不清楚的地方,我深表歉意。具体来说,您的标题中有 HMTLFILE,而不是 HTMLFILE.
  • 您选择不包含 Microsoft XML 6.0Microsoft HTML 对象库 引用并使用早期绑定是否有原因?没有静态对象变量的后期绑定会在重复调用函数时显着减慢速度。

标签: vba excel xmlhttprequest createobject


【解决方案1】:

对该函数的重复调用将导致对CreateObject function 的多次调用。 oXMLHTTP 和 htmlObj 对象变量可以设为静态,或者可以包含库引用,并且变量声明更改为 Early Binding。

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

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

Module1 代码表:

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)。

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 2011-03-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多