2011-05-31 127 views
3

我正在使用称为mathtype的程序从Word文档中拉出一些方程式对象。我已经在VBA中编写了使用他们的API完美工作的代码,但是我必须将其翻译成VBScript文件。我已经看遍了谷歌,但还没有找到任何解决方案(如果甚至有可能)从VBScript调用VBA库。从VBScript调用外部VBA

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

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

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

+0

您可以将宏连接到Word文档中的“打开”事件,然后从VBScript中打开该文件。这一切都取决于你需要在VBA和VBscript代码之间进行多少交互。 Mathtype代码是在DLL还是VBA加载项? – 2011-05-31 19:55:01

+0

基本上我只需要一个类(我可以在我的VBScript中重新定义它)和一个函数(这是令人烦恼的部分)从一个“全局模板”VBA项目(VBA中的参考是.dot)。 – DurkD 2011-05-31 20:05:25

回答

2

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

但是,重用现有Word-VBA代码的一种方法是使用/m<macroname>命令行开关(有关详细信息,请参阅http://support.microsoft.com/kb/210565/en-us)通过WScript.Shell.Run运行Word。这具有限制,即需要调用特定宏的加班,再次启动Word过程,运行该宏,然后结束。意思是,如果你只需要一次调用Word.VBA来完成特定的任务,这可能是好的,但是如果你需要在VBScript和VBA宏之间进行大量的进程间通信,你应该寻找一个不同的解决方案。

2

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

类 “另clsTest” 在文件 “Tester.docm”:

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

再次 - 我只测试了这个简单的例子:你必须以使其适应您的情况和试试看。