Макрос слова: «Sub или функция не определена» на втором компьютере - PullRequest
0 голосов
/ 12 февраля 2019

Я создал файл .docm с 2 макросами, и все отлично работает на моем ПК, но если я скопирую файл .docm на другой компьютер, он выдаст ошибку «sub или function notfined».

Макрос 1: кнопка activeX (Developer - Legacy tools) с прикрепленным макросом:

Private Sub buttonStart_Click()
    Main
End Sub

Макрос 2: «Основной» (создается с помощью View - Macros - Show Macros)

Sub Main()
    'Calls other subs and functions in the right order
End Sub

Вкл.на другом компьютере я дал разрешение Word на использование activeX, но макрос «Main» отсутствует в списке View - View Macros, и он отображает сообщение об ошибке каждый раз, когда я пытаюсь запустить макрос (ы), нажимая кнопку.

Извините, я новичок в VBA и макросах.Нужно ли связывать второй макрос или добавлять его другим способом, чтобы он был доступен на других ПК?

Редактировать: Левая сторона в редакторе VBA (выглядит одинаково для обоих макросов):

enter image description here

1 Ответ

0 голосов
/ 13 февраля 2019

Исходя из моего понимания ситуации:

  1. При двойном щелчке элемента управления ActiveX будет создана процедура (или выбрана, если она уже существует) для действия элемента управления по умолчанию.Это всегда будет в модуле класса ThisDocument документа, в который встроен элемент управления ActiveX.
  2. Когда макрос создается с использованием элемента управления в пользовательском интерфейсе Word, этот макрос будет автоматически создан вШаблон Normal.dotm (по умолчанию) в модуле с именем NewMacros.
  3. В списке доступных макросов появятся только макросы в обычных модулях, определенных как «публичные» Sub процедуры, не имеющие аргументов.Причина, по которой событие для элемента управления ActiveX не отображается в списке, заключается в том, что a) оно Private не является общедоступным и b) оно не находится в обычном модуле - оно находится в ThisDocument, который является модулем класса (представляет документ науровень кода).

Итак, buttonStart_Click находится в документе, который был распространен на другой ПК, в модуле ThisDocument.Sub Main, с другой стороны, был создан в NewMacros в шаблоне Normal.dotm, который остался на исходном компьютере.

Поэтому вам необходимо

  1. Нажмитев проекте BilderEinlesen перейдите в меню Insert и вставьте в проект модуль .По умолчанию он будет называться Module1.
  2. . Дважды щелкните NewMacros в проекте Normal, чтобы открыть кодовую страницу.Выберите Sub Main полностью, скопируйте его.
  3. Дважды щелкните Module1, чтобы открыть кодовую страницу.Если Option Explicit находится не сверху, введите его. Вставьте скопированный Sub Main.

Теперь обе процедуры должны быть в документе, который будет распространяться.

Примечание: Лично я бы переименовал Sub Main во что-то другое.Sub Main генерируется VBA при определенных автоматических обстоятельствах (например, которые использовались для его создания), а может привести к конфликту, если VBA снова захочет создать такой макрос ... ИЛИ, если другой макросс таким именем присутствует в проекте, открытом одновременно.Если вы переименуете, не забудьте также изменить вызов процедуры в событии нажатия кнопки.

...