#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, вам следует поискать другое решение.