Невозможно запустить макрос... макрос может быть недоступен в этой книге
Я пытаюсь вызвать подпрограмму на другом листе, но я получил сообщение об ошибке во время выполнения.
В частности, у меня есть две таблицы и несколько сабвуферов 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"
но не сработало.
Любая помощь будет оценена.
24 ответа
Если в названии книги есть пробел, вы должны использовать одинарные кавычки (') вокруг имени файла. Я также удалил полную остановку.
Application.Run "'Python solution macro.xlsm'!PreparetheTables"
В моем случае эта ошибка возникла, когда имя Sub было идентично имени модуля.
В соответствии с КБ Microsoft, попробуйте разрешить программный доступ к проекту Visual Basic:
- Нажмите кнопку Microsoft Office, а затем нажмите Параметры Excel.
- Нажмите Трастовый центр.
- Нажмите Настройки центра управления безопасностью.
- Нажмите Настройки макроса.
- Нажмите, чтобы установить флажок Доверительный доступ к объектной модели проекта VBA.
- Нажмите кнопку ОК, чтобы закрыть диалоговое окно "Параметры Excel".
- Возможно, вам придется закрыть и снова открыть Excel.
Вы также сталкиваетесь с этой проблемой, когда создаете подпрограмму в модуле класса.
Когда вы пытаетесь запустить код извне, вы получаете эту ошибку.
Вы также не можете назначить макрос кнопке для члена модуля класса.
Если вы попытаетесь запустить код изнутри, нажав зеленую кнопку воспроизведения, вы также увидите ту же ошибку.
Либо переместите процедуру в обычный модуль, либо создайте новую процедуру в обычном модуле, который вызывает члена класса.
У меня была та же проблема, и у меня "Compiled VBA Project", который выявил ошибку. После исправления и компиляции макросы сработали.
В моем случае ошибка произошла, когда я поместил свой макрос (общедоступную подпрограмму) в ThisWorkbook
раздел файла, ожидая, что он сделает его видимым для Application.Run
функция. Это было не так, и я получил ту ошибку, о которой вы упомянули.
Я переместил свой макрос в отдельный модуль, и проблема была решена.
Зайдите в диспетчер задач и посмотрите, работают ли в фоновом режиме какие-либо процессы Microsoft Excel. Я закрыл фоновые процессы Excel, и мой код снова заработал.
У меня была проблема с этой ошибкой, оказалось, что имя файла было причиной проблемы.
Я назвал это так: Application.Run "'" & strPath & strFName & "'!UPC.PrintaFew"
Переменная strFName содержала апостроф, который, конечно, все испортил. У меня ушло несколько часов, чтобы понять это. Но как только апостроф был удален из имени файла, он работал.
Мне пришлось удалить все дефисы и подчеркивания из имен файлов и макросов, убедиться, что макрос был включен, и добавить их имя модуля. Имя макроса
Вот чем я закончил: Application.Run ("'" & WbName & "'" & "!ModuleName.MacroName")
На самом деле вам нужно создать модуль и написать туда код.
Посмотрите это видео: https://www.youtube.com/watch?v=_EVxKkE9p1M
У меня была та же проблема, что и у OP, и я обнаружил, что это связано с ошибкой объявления опций:
' Comment comment
Options Explicit
Sub someMacroMakechart()
в подмодуле вместо правильного;
' Comment comment
Option Explicit
Sub someMacroMakechart()
Эта ошибка появляется при открытии последнего сохраненного макроса с синтаксической ошибкой. Сообщение, однако, будет ссылаться на макрос, который вызывает ошибочную подпрограмму или функцию. Чтобы решить эту проблему, я обычно пытаюсь запустить последние отредактированные макросы отдельно.
Удалите имя макроса и соберите снова. Я сделал это, и макрос работал.
В моем случае макрос, который я хотел запустить, был назначен кнопке на рабочем листе (кнопка Forms, а не кнопка ActiveX).
Макрос был определен не в рабочей книге, а в отдельной надстройке .xlam. При нажатии на кнопку выдавало ошибку:Cannot run the macro 'NameOfMyMacro'. The macro may not be available in this workbook or all macros may be disabled.
Ни один из приведенных здесь ответов не сработал для меня, но сработало то, что папка рабочей книги стала «надежным расположением».
См. Лента -> Файл -> Параметры -> Центр управления безопасностью -> Настройки центра управления безопасностью -> Надежные расположения -> Добавить новое расположение.
Наиболее вероятная причина этой ошибки - функция безопасности в Excel VBA, которая не позволяет запускать код VBA. Пользователь должен явно дать разрешение на запуск макросов Excel вместе с книгой. Это может или не может требовать программного доступа к проекту Visual Basic.
Что решило эту ошибку для меня:
Включить редактирование и включить контент
- Изменение настроек макроса без программного доступа Шаги и детали
Изменение настроек макроса вместе с программным доступом (не рекомендуется, если сработает какой-либо из вышеперечисленных процессов. Это дало бы контроль кода для изменения элементов самого проекта VBA, включая ссылки и сам код - ссылка)
У меня была та же проблема, и мне потребовалось время, чтобы разобраться. Моей целью было вызвать код в отдельной книге. У меня была целевая подпрограмма в коде листа, а не модуль. Оказывается, может показаться, что невозможно удаленно вызвать подпрограмму или функцию, которых нет в модуле.
Я получил эту ошибку, когда подпрограмма была назначена программно с использованием свойства OnAction. Чтобы это работало, вам необходимо указать точный путь, например «My Workbook.xlsm»!MyMacroScript.
.OnAction = "'" & ThisWorkbook.Name & "'!" & "MyMacroScript"
В моем случае это была проблема безопасности, которую я решил, разблокировав файл в проводнике (Свойства/Разблокировать).
Эта ошибка также возникает, если вы создаете подпрограмму или функцию в "объекте Microsoft Excel" (например, Sheet1, Sheet2, ...) вместо того, чтобы создавать ее в модуле.
Например: вы создаете с помощью VBA кнопку и устанавливаете .OnAction = 'btn_action'
. А такжеSub btn_action
вы поместили в объект Sheet вместо Module.
В моем случае это было связано с наличием публичной процедуры в другом модуле и закрытой процедуры в вызывающем модуле с тем же именем. VBA не делает различий между двумя, и, следовательно, дал тупую ошибку.
Кто-нибудь пробовал установитьApplication.AutomationSecurity
до 1 (msoAutomationSecurityLow)?
Ссылка:
https://learn.microsoft.com/en-us/office/vba/api/excel.application.automationsecurityhttps://learn.microsoft.com/en-us/office/vba/api/office.msoautomationsecurity
У меня было такое же сообщение об ошибке "Не могу найти макрос ___ и т. Д.", И эта проблема сохранялась даже после того, как я сохранил файл как XLSX. Это казалось очень странным... как он мог запускать макрос, когда в файле нет макросов!
Когда я изучил файл с помощью редактора пользовательского интерфейса, я обнаружил, что макрос вызывается при инициализации файла, а другой пользовательский макрос вызывается, когда пользователь нажимает кнопку "Сохранить".
С помощью редактора пользовательского интерфейса я удалил весь XML-код, и сообщения об ошибках исчезли.
Я недавно столкнулся с этой проблемой и попробовал все вышеперечисленные решения, но в духе. На самом деле проблема в том, что я создаю флажок динамически с помощью Excel vba и назначаю макрос на действие, но когда я нажимаю на флажок, он выдает ошибку выше.
Решение
With Sheets("BACKUP_QUERY")
cbx.OnAction = .CodeName & ".ProcessCheckBox"
End With
Как мне найти решение?
Щелкните правой кнопкой мыши по флажку, а затем назначьте макрос вручную. Затем я проверил это, он работал отлично. Затем я заметил, что excel назначает макрос с использованием кодовых имен листов, а не фактических имен, которые мы установили внизу.