Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 基于操作系统声明公共变量类型_Vba_Ms Word_Msxml6 - Fatal编程技术网

Vba 基于操作系统声明公共变量类型

Vba 基于操作系统声明公共变量类型,vba,ms-word,msxml6,Vba,Ms Word,Msxml6,我正在编辑一个VBA宏,它适用于Office 2003、2007、2010、2013等,适用于我们以前使用的任何windows操作系统版本。现在,我们已升级到windows 10,以下代码行: Private m_document As MSXML2.DOMDocument 不起作用。这是必须的 Private m_document As MSXML2.DOMDocument60 在上下文中,我声明了显式全局变量,这就是其中之一 问题是,我需要在我的计算机上编辑这些宏,但它们也需要在较旧的操

我正在编辑一个VBA宏,它适用于Office 2003、2007、2010、2013等,适用于我们以前使用的任何windows操作系统版本。现在,我们已升级到windows 10,以下代码行:

Private m_document As MSXML2.DOMDocument
不起作用。这是必须的

Private m_document As MSXML2.DOMDocument60
在上下文中,我声明了显式全局变量,这就是其中之一

问题是,我需要在我的计算机上编辑这些宏,但它们也需要在较旧的操作系统版本上工作,因为这些版本上仍然使用该产品。我已经尝试了很多东西,想弄清楚是否有任何方法可以让这一切顺利进行,否则,就没办法了。MSXML6在我的旧电脑(运行Windows7)和新电脑上都有。因此,在这一点上,我希望有一种方法可以根据使用的操作系统定义这个变量。我知道你可以检查操作系统,我已经找到了代码,但是有没有一种方法可以根据操作系统有条件地定义变量

即:


您需要使用后期绑定

 Private m_document As Object

 Sub testSub()

     If windows10 Then
          Set m_document = CreateObject("MSXML2.DOMDocument60")
     Else
          Set m_document = CreateObject("MSXML2.DOMDocument")
     End If

 End Sub

作为一个额外提示,如果您这样做,您将失去VBA中的intellisense。因此,您可以将其设置为“Private m_document as MSXML2.DOMDocument60”,并使用intellisense创建所有代码,然后在准备部署后,按上述方式更改回后期绑定。

Mmm。我记得,从2003年开始,MSXML6解析器在Office的每个版本中都进行了分发,因为2003年是引入XML特性的版本。您确定它在其他系统上不可用,并且仅仅将声明从DOMDocument更改为DOMDocument60是行不通的吗?这是我尝试的第一件事,因为正是您所说的。当我更改为DOMDocument60时,我得到了一个类型不匹配错误。所以…这也没有完全起作用,不是因为它错了,而是因为CreateObject(“MSXML2.DOMDocument60”)不能正常工作。奇怪的是,CreateObject(“MSXML2.DOMDocument”)在这两种平台上都运行良好。所以谢谢你们,这很有帮助,我不知道为什么它会这样工作,我想我只是比以前更讨厌VBA了
 Private m_document As Object

 Sub testSub()

     If windows10 Then
          Set m_document = CreateObject("MSXML2.DOMDocument60")
     Else
          Set m_document = CreateObject("MSXML2.DOMDocument")
     End If

 End Sub