从VBScript调用外部VBA

从VBScript调用外部VBA,vba,vbscript,ms-word,ms-office,Vba,Vbscript,Ms Word,Ms Office,我正在使用一个名为mathtype的程序从word文档中提取一些等式对象。我已经用VBA编写了代码,使用他们的API可以完美地工作,但我必须将其转换为VBScript文件。我在google上到处找了找,但还没有找到任何解决方案来说明如何(如果可能的话)从VBScript调用VBA库 VBScript无法查看MathTypeSDK对象/函数 如果不可能,如何将需要运行的宏封装在全局可用的word文件中,并从VBScript调用它 编辑:明白了!不幸的是,下面的方法虽然有用,但不适合我的情况。我发现

我正在使用一个名为mathtype的程序从word文档中提取一些等式对象。我已经用VBA编写了代码,使用他们的API可以完美地工作,但我必须将其转换为VBScript文件。我在google上到处找了找,但还没有找到任何解决方案来说明如何(如果可能的话)从VBScript调用VBA库

VBScript无法查看MathTypeSDK对象/函数

如果不可能,如何将需要运行的宏封装在全局可用的word文件中,并从VBScript调用它

编辑:明白了!不幸的是,下面的方法虽然有用,但不适合我的情况。我发现了更接近的东西:将宏嵌入到一个全局文件中,并通过Word Objects Run命令调用它。
objWord.Run“Normal.NewMacros.RunMain”

我想Word VBA不是用来创建可重用库的(用于外部程序)


但是,重用现有Word VBA代码的一种方法是通过
WScript.Shell运行Word。使用
/m
命令行开关运行
(有关详细信息,请参阅)。这有一个限制,即每次需要调用特定宏时,都会再次启动Word进程,运行该宏,然后结束。也就是说,如果您只需要为特定任务调用Word.VBA一次,这可能没问题,但如果您需要在VBScript和VBA宏之间进行大量进程间通信,则应寻求不同的解决方案。

以下是一种可能适合您的方法。我测试了这个简单的例子

文件“Tester.docm”中的类“clsTest”:

类“实例化”标记为“PublicNotCreatable”

“Tester.docm”中的模块:

在vbscript中:

Dim fPath, fName

fPath = "C:\Documents and Settings\twilliams\Desktop\"
fName = "Tester.docm"

Dim wdApp, o

Set wdApp = CreateObject("word.application")
wdApp.visible=true
wdapp.documents.open fPath & fName

Set o = wdApp.Run("GetClass")
o.Hello

Set o=nothing

再次-我只测试了这个简单的示例:您必须根据自己的情况调整它并进行尝试。

您可以将宏连接到Word文档中的“打开”事件,然后从VBScript中打开Word文件。这完全取决于VBA和VBscript代码之间需要多少交互。Mathtype代码是在dll中还是在VBA外接程序中?基本上,我只需要一个类(我可以在VBScript中重新定义它)和一个函数(这是最麻烦的部分),来自“全局模板”VBA项目(VBA中的引用是.dot)。
Public Function GetClass() As clsTest
    Set GetClass = New clsTest
End Function
Dim fPath, fName

fPath = "C:\Documents and Settings\twilliams\Desktop\"
fName = "Tester.docm"

Dim wdApp, o

Set wdApp = CreateObject("word.application")
wdApp.visible=true
wdapp.documents.open fPath & fName

Set o = wdApp.Run("GetClass")
o.Hello

Set o=nothing