Ответ 1
Если у вас есть пробел в названии книги, вы должны использовать одинарные кавычки (') вокруг имени файла. Я также удалил полную остановку.
Application.Run "'Python solution macro.xlsm'!PreparetheTables"
Я пытаюсь вызвать подпрограмму на другом листе, но я получил сообщение об ошибке во время выполнения.
В частности, у меня есть две таблицы и несколько сабвуферов 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"
но не сработало.
Если у вас есть пробел в названии книги, вы должны использовать одинарные кавычки (') вокруг имени файла. Я также удалил полную остановку.
Application.Run "'Python solution macro.xlsm'!PreparetheTables"
В Microsoft KB попробуйте разрешить программный доступ к проекту Visual Basic:
- Нажмите кнопку Microsoft Office, а затем нажмите Параметры Excel.
- Нажмите Траст-центр.
- Нажмите Настройки центра управления безопасностью.
- Нажмите Настройки макроса.
- Нажмите, чтобы установить флажок Доверительный доступ к объектной модели проекта VBA.
- Нажмите кнопку ОК, чтобы закрыть диалоговое окно "Параметры Excel".
- Возможно, вам придется закрыть и снова открыть Excel.
Имел ту же проблему, и я "Скомпилировал проект VBA", который выявил ошибку. После коррекции и компиляции макросы работали.
Вы также сталкиваетесь с этой проблемой при создании процедуры в модуле класса.
Когда вы пытаетесь запустить код извне, вы получаете эту ошибку.
Вы также не можете назначить макрос кнопке члену модуля класса.
Если вы попытаетесь запустить из кода, нажав зеленую кнопку воспроизведения, вы также увидите ту же ошибку.
Либо переместите подпрограмму в обычный модуль, либо создайте новую процедуру в регулярном модуле, который вызывает член класса.
У меня также была проблема с этой ошибкой, оказалось, что имя файла вызывает проблему.
Я называл это следующим образом: Application.Run "и strPath и strFName и"!! UPC.PrintaFew "
Переменная strFName содержала в себе апостроф, который, конечно же, перепутал вещи. Мне потребовалось несколько часов, чтобы понять это. Но как только апостроф был удален из имени файла, он сработал.
Эта ошибка появляется при открытии макроса, который последний раз сохранен с синтаксической ошибкой. Сообщение, хотя и будет ссылаться на макрос, который вызывает ошибочный суб или функцию. Чтобы решить эту проблему, я обычно пытаюсь выполнить отдельные отредактированные макросы отдельно.
В моем случае эта ошибка возникла, когда имя Sub было идентично имени модуля.
Удалите макрос имени и снова создайте его. Я сделал это, и макрос работал.
Наиболее вероятной причиной этой ошибки является то, что функция безопасности в Excel VBA, которая не позволяет запускать код VBA. Пользователь должен явно предоставить разрешение на запуск макросов excel вместе с книгой. Этот может или не может требовать программный доступ к проекту Visual Basic.
Для меня эта ошибка была решена: -
Включить редактирование и включение содержимого
Изменение параметров макроса вместе с программными доступ ( не рекомендуется, если какой-либо из вышеперечисленных процессов работает. Это позволило бы управлять кодом для изменения элементов в VBA Сам проект, включая ссылки и сам код - Ссылка)
У меня была такая же проблема, как и у OP, и это было вызвано тем, что объявление опций было написано с ошибкой:
' Comment comment
Options Explicit
Sub someMacroMakechart()
в дополнительном модуле вместо правильного;
' Comment comment
Option Explicit
Sub someMacroMakechart()
Сохранить как .xlsm(Excel Macro-Enabled Workbook).
В моем случае это было связано с тем, что публичная процедура в другом модуле и частная процедура в вызывающем модуле с тем же именем. VBA не различает эти два и, следовательно, дает тупые ошибки.
Мне пришлось удалить все тире и символы подчеркивания из имен файлов и имен макросов, убедиться, что макрос включен и добавить их имя модуля .macro
Вот что я закончил: Application.Run( "'" и WbName и "'" и "! ModuleName.MacroName" )
У меня была такая же проблема, и мне потребовалось время, чтобы разобраться. Моя цель состояла в том, чтобы вызвать код в отдельной книге. У меня был целевой объект в листе, а не в модуле. Оказывается, что не может удаленно вызывать суб или функцию, которая не находится в модуле.
Я недавно столкнулся с этой проблемой и попробовал все вышеперечисленные решения, но в духе. На самом деле проблема в том, что я создаю флажок динамически с помощью Excel vba и назначаю макрос на действие, но когда я нажимаю на флажок, он выдает ошибку выше.
Решение
With Sheets("BACKUP_QUERY")
cbx.OnAction = .CodeName & ".ProcessCheckBox"
End With
Как мне найти решение?
Щелкните правой кнопкой мыши по флажку, а затем назначьте макрос вручную. Затем я проверил это, он работал отлично. Затем я заметил, что excel назначает макрос с использованием кодовых имен листов, а не фактических имен, которые мы установили внизу.
В моем случае ошибка произошла, когда я поместил свой макрос (public sub) в раздел ThisWorkbook
файла, ожидая, что он сделает его видимым для функции Application.Run
. Это было не так, и я получил ту ошибку, о которой вы упоминали.
Я переместил свой макрос в отдельный модуль, и это решило проблему.
проверить:
Application.Run "'Python solution macro.xlsm'!ThisWorkbook.PreparetheTables"
используйте имя модуля.