2011-05-31 133 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 

再次 - 我只測試了這個簡單的例子:你必須以使其適應您的情況和試試看。