Вопрос

У меня есть приложение access-vba, которое также использует word-vba.При запуске приложения на моем локальном компьютере оно работает хорошо.Как только он будет перенесен на другие (те же версии доступа и слова), он выйдет из строя, когда дело дойдет до части слова vba.Такие команды, как document.open или .saveas2, завершаются неудачей: Method 'SaveAs2' of object failed например.

Я также заметил, что библиотеки, на которые я ссылаюсь в приложении, необходимы любому другому конечному пользователю.Я привык просто компилировать с помощью библиотек, и с этого момента они всегда включаются в .jar/.exe/etc, но кажется, что когда вы перемещаете приложение на чужие компьютеры, оно всегда пытается перекомпилировать?

Я не очень хорошо разбираюсь в VBA, поэтому предполагаю, что мои сбойные функции word-vba происходят из-за ошибки ссылки, есть еще идеи?

Это было полезно?

Решение

«Библиотеки», на которые может ссылаться VBA, на самом деле COM-объекты, обычно упакованные в виде файлов DLL.Это объекты, экземпляры которых динамически создаются во время выполнения (если они еще не созданы) по запросу.Они загружаются Windows в память, и ваша программа использует стандарт COM для взаимодействия с ними, вызова методов и получения или установки свойств (межпроцессное взаимодействие).Обычно существует два способа взаимодействия с ними:раннее связывание и позднее связывание.

При раннем связывании вы добавляете ссылку на библиотеку во время написания кода, что позволяет IDE VBA обеспечивать автодополнение и некоторую проверку ошибок во время компиляции.Вы создаете экземпляры объектов с помощью ключевого слова «new» и непосредственно вводя имя объекта.Однако раннее связывание требует, чтобы вы выбрали конкретную dll и, возможно, конкретную версию интерфейса.Это может привести к проблемам, если вы ссылаетесь на конкретную версию интерфейса, которой нет у одного из ваших пользователей.

При позднем связывании вы создаете экземпляры объектов с помощью CreateObject или GetObject, запрашивая их по имени из Windows.Windows будет поищи имя и вернуть ссылку на объект.Переменные в вашем коде — это просто объекты, и вызов методов немного опасен, поскольку компилятор позволяет вам вводить любое имя метода и не выдает предупреждений во время компиляции.Преимущество этого подхода заключается в том, что пока вы вызываете хорошо зарекомендовавшие себя методы и не используете ничего нового или устаревшего, код будет работать независимо от версии пользователя.

Что касается возникающей ошибки, вы можете проверить версию Office на компьютерах пользователей: Сохранить как2 был добавлен в Office 2010.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top