Не удается запустить макрос... макрос может быть недоступен в этой книге

Я пытаюсь вызвать подпрограмму на другом листе, но я получил сообщение об ошибке во время выполнения.

В частности, у меня есть две таблицы и несколько сабвуферов VBA в этих таблицах. В одном из проектов VBA (скажем, workbook1.xlsm) у меня есть следующий код:

Sub AnalysisTableMacro()
Workbooks("Python solution macro.xlsm").Activate
Application.Run "Python solution macro.xlsm!.PreparetheTables"
End Sub

Но я получил следующую ошибку. Макросы на обоих листах включены. В обеих таблицах сабвуферы находятся в Модуле1.

Не удается запустить макрос "Workbook.xlsm! PrepareTheTables". Макрос может быть недоступен в> этой книге или все макросы могут быть отключены.

Я также попробовал Application.Run "Python solution macro.xlsm!Module1.PreparetheTables" но не сработало.

Ответ 1

Если у вас есть пробел в названии книги, вы должны использовать одинарные кавычки (') вокруг имени файла. Я также удалил полную остановку.

Application.Run "'Python solution macro.xlsm'!PreparetheTables"

Ответ 2

В Microsoft KB попробуйте разрешить программный доступ к проекту Visual Basic:

  1. Нажмите кнопку Microsoft Office, а затем нажмите Параметры Excel.
  2. Нажмите Траст-центр.
  3. Нажмите Настройки центра управления безопасностью.
  4. Нажмите Настройки макроса.
  5. Нажмите, чтобы установить флажок Доверительный доступ к объектной модели проекта VBA.
  6. Нажмите кнопку ОК, чтобы закрыть диалоговое окно "Параметры Excel".
  7. Возможно, вам придется закрыть и снова открыть Excel.

Ответ 3

Имел ту же проблему, и я "Скомпилировал проект VBA", который выявил ошибку. После коррекции и компиляции макросы работали.

Ответ 4

Вы также сталкиваетесь с этой проблемой при создании процедуры в модуле класса.

Когда вы пытаетесь запустить код извне, вы получаете эту ошибку.
Вы также не можете назначить макрос кнопке члену модуля класса.

Если вы попытаетесь запустить из кода, нажав зеленую кнопку воспроизведения, вы также увидите ту же ошибку.

Либо переместите подпрограмму в обычный модуль, либо создайте новую процедуру в регулярном модуле, который вызывает член класса.

Ответ 5

У меня также была проблема с этой ошибкой, оказалось, что имя файла вызывает проблему.

Я называл это следующим образом: Application.Run "и strPath и strFName и"!! UPC.PrintaFew "

Переменная strFName содержала в себе апостроф, который, конечно же, перепутал вещи. Мне потребовалось несколько часов, чтобы понять это. Но как только апостроф был удален из имени файла, он сработал.

Ответ 6

Эта ошибка появляется при открытии макроса, который последний раз сохранен с синтаксической ошибкой. Сообщение, хотя и будет ссылаться на макрос, который вызывает ошибочный суб или функцию. Чтобы решить эту проблему, я обычно пытаюсь выполнить отдельные отредактированные макросы отдельно.

Ответ 7

В моем случае эта ошибка возникла, когда имя Sub было идентично имени модуля.

Ответ 8

Удалите макрос имени и снова создайте его. Я сделал это, и макрос работал.

Ответ 9

Наиболее вероятной причиной этой ошибки является то, что функция безопасности в Excel VBA, которая не позволяет запускать код VBA. Пользователь должен явно предоставить разрешение на запуск макросов excel вместе с книгой. Этот может или не может требовать программный доступ к проекту Visual Basic.

Для меня эта ошибка была решена: -

  • Включить редактирование и включение содержимого

    Включить кнопку содержимого

  • Изменение настроек макроса без программного доступа Шаги и детали
  • Изменение параметров макроса вместе с программными доступ ( не рекомендуется, если какой-либо из вышеперечисленных процессов работает. Это позволило бы управлять кодом для изменения элементов в VBA Сам проект, включая ссылки и сам код - Ссылка)

    Шаги здесь

Ответ 10

У меня была такая же проблема, как и у OP, и это было вызвано тем, что объявление опций было написано с ошибкой:

' Comment comment  

Options Explicit  

Sub someMacroMakechart()

в дополнительном модуле вместо правильного;

' Comment comment  

Option Explicit  

Sub someMacroMakechart()

Ответ 11

Сохранить как .xlsm(Excel Macro-Enabled Workbook).

Ответ 12

В моем случае это было связано с тем, что публичная процедура в другом модуле и частная процедура в вызывающем модуле с тем же именем. VBA не различает эти два и, следовательно, дает тупые ошибки.

Ответ 13

Мне пришлось удалить все тире и символы подчеркивания из имен файлов и имен макросов, убедиться, что макрос включен и добавить их имя модуля .macro

Вот что я закончил: Application.Run( "'" и WbName и "'" и "! ModuleName.MacroName" )

Ответ 14

У меня была такая же проблема, и мне потребовалось время, чтобы разобраться. Моя цель состояла в том, чтобы вызвать код в отдельной книге. У меня был целевой объект в листе, а не в модуле. Оказывается, что не может удаленно вызывать суб или функцию, которая не находится в модуле.

Ответ 15

Я недавно столкнулся с этой проблемой и попробовал все вышеперечисленные решения, но в духе. На самом деле проблема в том, что я создаю флажок динамически с помощью Excel vba и назначаю макрос на действие, но когда я нажимаю на флажок, он выдает ошибку выше.

Решение

With Sheets("BACKUP_QUERY")
    cbx.OnAction = .CodeName & ".ProcessCheckBox"           
End With

Как мне найти решение?

Щелкните правой кнопкой мыши по флажку, а затем назначьте макрос вручную. Затем я проверил это, он работал отлично. Затем я заметил, что excel назначает макрос с использованием кодовых имен листов, а не фактических имен, которые мы установили внизу.

Ответ 16

В моем случае ошибка произошла, когда я поместил свой макрос (public sub) в раздел ThisWorkbook файла, ожидая, что он сделает его видимым для функции Application.Run. Это было не так, и я получил ту ошибку, о которой вы упоминали.

Я переместил свой макрос в отдельный модуль, и это решило проблему.

Ответ 17

проверить:

Application.Run "'Python solution macro.xlsm'!ThisWorkbook.PreparetheTables"

используйте имя модуля.