Вызов внешнего VBA из VBScript

#vba #vbscript #ms-word #ms-office

#vba #vbscript #ms-word #ms-office

Вопрос:

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

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

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

Редактировать: Понял! К сожалению, приведенные ниже подходы, хотя и полезны, не сработали в моей ситуации. Я нашел кое-что более близкое: встраивание макроса в глобальный файл и вызов его через команду запуска Word Objects. objWord.Выполнить «Нормально.Новый MACROS.runMain»

Комментарии:

1. Вы могли бы подключить свой макрос к событию «открыть» в документе Word, а затем просто открыть файл word из VBScript. Все зависит от того, какое взаимодействие вам необходимо между кодом VBA и VBScript. Находится ли код Mathtype в dll или это надстройка VBA?

2. В принципе, мне просто нужен один класс (я мог бы просто переопределить его в моем VBScript) и одна функция (это вызывающая беспокойство часть) из проекта VBA «глобальный шаблон» (ссылка в VBA — это точка).

Ответ №1:

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

Класс «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 SettingstwilliamsDesktop"
fName = "Tester.docm"

Dim wdApp, o

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

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

Set o=nothing
  

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

Ответ №2:

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

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