Вызов внешнего VBA из VBScript - PullRequest
4 голосов
/ 31 мая 2011

Я использую программу mathtype для извлечения некоторых объектов уравнения из текстового документа. Я написал код на VBA, который отлично работает с использованием их API, но я должен перевести его в файл VBScript. Я просмотрел Google, но не нашел решения о том, как (если это вообще возможно) вызвать библиотеку VBA из VBScript.

VBScript не может видеть объекты / функции MathTypeSDK.

Если это невозможно, как мне заключить макрос, который мне нужен, для запуска в глобально доступный файл слов и вызвать его из VBScript?

Редактировать: Понял! К сожалению, приведенные ниже подходы, хотя и полезны, не помогли в моей ситуации. Я нашел кое-что ближе: встраивание макроса в глобальный файл и вызов его с помощью команды Word Objects Run. objWord.Run "Normal.NewMacros.RunMain"

Ответы [ 2 ]

3 голосов
/ 01 июня 2011

Вот подход, который может работать для вас.Я протестировал этот простой пример.

Класс "clsTest" в файле "Tester.docm":

Public Sub Hello()
    MsgBox "Hello"
End Sub

Класс "Instancing" помечен как "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

Опять же - я протестировал только этот простой пример: вам придется адаптировать его к вашей ситуации и попробоватьэто из.

2 голосов
/ 01 июня 2011

Word-VBA не был создан для создания библиотек многократного использования, я полагаю (для использования во внешних программах).

Однако один из способов повторно использовать существующий код Word-VBA - запустить Word через WScript.Shell.Run с помощью переключателя командной строки /m<macroname> (подробности см. http://support.microsoft.com/kb/210565/en-us). Это имеет ограничение, заключающееся в том, что каждый раз, когда вам нужно вызывать определенный макрос, процесс Word запускается снова, запускает этот макрос и завершается впоследствии. Значит, если вам нужен только один вызов Word.VBA для конкретной задачи, это может быть нормально, но если вам нужно много межпроцессного взаимодействия между вашим VBScript и вашим макросом VBA, вам следует искать другое решение.

...