【问题标题】:VBA cannot create new CXMLHTTPHandlerVBA 无法创建新的 CXMLHTTPHandler
【发布时间】:2019-11-27 17:07:44
【问题描述】:

我目前正在处理后期绑定,因为宏在 2010 年运行良好时无法在 Excel 2013 中运行。显然,2010 使用 14.0 对象库,而 2013 使用 15.0。

 Dim myHttpRequest As Object
 Dim myHttpHandler as Object

 Set myHttpRequest = CreateObject("MSXML2.XMLHTTP")
 Set myHttpHandler = CreateObject("CXMLHTTPHandler")

这会产生 ActiveX 无法创建对象错误。我花了一天多的时间研究这个。

是否必须添加某种资源才能使这些对象工作?这些对象甚至存在于 Excel 的 15.0 对象库中吗?

我完全不知道该怎么做,因为这通常有效。

【问题讨论】:

    标签: excel vba httphandler late-binding


    【解决方案1】:

    我强烈怀疑,看这个帖子http://dailydoseofexcel.com/archives/2006/10/09/async-xmlhttp-calls/

    您正在处理用户定义的类。如果是这种情况,您需要跨该类进行复制,请按照链接中列出的步骤操作,然后只需创建该类的新实例,无需后期绑定,因为不涉及任何库。

    如果其他库被早期绑定引用,另一个步骤是根据需要将该类中的代码转换为后期绑定。

    根据该链接:

    Dim MyXmlHttpHandler As CXMLHTTPHandler
    
    ' Create an instance of the wrapper class.
    Set MyXmlHttpHandler = New CXMLHTTPHandler
    

    从该链接引用的其他步骤是:

    1. 将CXMLHTTPHandler 类导出并删除到已知目录
    2. 用记事本打开该文件
    3. 找到OnReadyStateChange子,并在签名后添加此文本:Attribute OnReadyStateChange.VB_UserMemId = 0
    4. 保存、关闭类模块并将其重新导入项目中

    【讨论】:

    • 您看到附加步骤部分了吗?你是否在 Excel 中实现了这个(看起来是基于标签的)?
    • 类已经存在,属性已经添加。我通过 Notepad++ 验证了这一点。
    • 我得到了一个未从Public Sub Initialize(ByRef xmlHttpRequest As MSXML2.XMLHTTP) 定义的用户定义类型,它位于用户定义的类中。
    • 因为 MSXML2.XMLHTTP 应该是签名中的对象作为后期绑定 Public Sub Initialize(ByRef xmlHttpRequest As Object) 如果是,您需要将导入代码中的任何早期绑定库引用转换为后期绑定你正在走的路线。更新了我的答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2012-10-30
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多