从VBScript调用外部VBA



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

VBScript无法查看MathTypeSDK对象/函数。

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

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

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

文件"Tester.docm"中的类"clsTest":

Public Sub Hello()
    MsgBox "Hello"
End Sub

类"实例化"标记为"PublicNotCreatable"。

"Tester.docm"中的模块:

Public Function GetClass() As clsTest
    Set GetClass = New clsTest
End Function

在您的vbscript中:

Dim fPath, fName
fPath = "C:Documents and SettingstwilliamsDesktop"
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 VBA并不是为了创建可重复使用的库(用于外部程序)。

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

最新更新