Запуск макроса Excel с помощью кнопки не работает

#excel #vba

Вопрос:

Макросы в моей электронной таблице, которые работали в течение многих лет, перестали работать с помощью кнопок, хотя они по-прежнему отлично работают в окне разработчика VBA. Я использую обычную форму (прямоугольник) в качестве кнопки и назначил ей макрос (выбрав из «Этой рабочей книги»).

Чтобы избежать предложенных исправлений, которые я видел в других подобных сообщениях…

  • Это все еще файл .xlsm
  • Макросы по-прежнему включены.
  • Он работает на том же ноутбуке, что и раньше (Windows 10, Office 365).
  • В последнее время никаких обновлений Windows не происходило.
  • У меня открыт только один файл.
  • Я попытался перезагрузить ноутбук и перезапустить Excel.
  • Я не использую элемент управления Active-X.
  • Я попробовал это с помощью кнопки управления формой и кнопки обычной формы — ни то, ни другое не работает.
  • Это не связано с фактическим кодом VBA (см. Доказательство ниже).

Я создал новую программу, чтобы показать, что проблема не в самом коде:

 Sub button_not_working()  MsgBox "button_not_working" End Sub  

Эта программа работает с помощью зеленой кнопки воспроизведения на экране VBA, но не с помощью назначенной кнопки на листе. Любая идея будет очень признательна! ———— Дополнительная Информация ————- Код находится в обычном модуле кода VBA (а не в области «Эта рабочая книга» на экране VBA). Макрос назначается щелчком правой кнопки мыши по форме, и список доступных макросов-это только те, которые указаны в «Этой книге» во всплывающем окне Назначить макрос. Скриншот ниже… Назначить Всплывающее окно Макроса При нажатии на фигуру для запуска назначенного макроса я получаю это сообщение об ошибке… Сообщение об ошибке при нажатии на фигуру для запуска макроса

Комментарии:

1. Чтобы уточнить, код находится в обычном модуле VBA, а не в разделе «Эта рабочая книга».

2. Скриншоты добавлены в исходный пост. В этом модуле рабочей книги нет кода

3. Решено — оказалось, что мне нужно было установить флажок «Включить макросы Excel 4.0». По-видимому, Microsoft только что начала отключать это по умолчанию в Office 365, начиная с этого месяца! Я опубликовал ответ в качестве резолюции.

Ответ №1:

Вы не можете вызвать код из ThisWorkbook события кнопки.

Мне нравится помещать события кнопок в код за листом, где находится кнопка. Таким образом, код перемещается вместе с листом, куда бы этот лист ни был скопирован.

Используйте кнопку формы. Щелкните правой кнопкой мыши на кнопке формы и выберите Assign Macro... . Затем выберите подпрограмму VBA из появившегося списка. Будут работать только процедуры, видимые в этом всплывающем окне.

ПРИМЕЧАНИЕ: Никогда не используйте _ ни в каких именах в VBA. Он зарезервирован для обработки событий.

 Public Sub ButtonIsWorking()  MsgBox "button is working" End Sub  

Код на листе:

Код на листе

Назначить Макрос:

Назначить Макрос

Нажатие кнопки:

Нажатие кнопки

Комментарии:

1. Извините, я должен был выразиться яснее. Код находится в обычном модуле кода VBA, а не в разделе «Эта рабочая книга». Я имел в виду, что назначил макрос кнопке из «ThisWorkbook» во всплывающем окне назначения.

2. Приятно знать, что я не должен включать _ в имена VBA. Я этого не знал. В любом случае я удалил _ и у меня та же проблема

3. @epe Пожалуйста, отредактируйте свой вопрос, чтобы включить скриншот того, где находится ваш код, и скриншот привязки кнопки. Они управляются графическим интерфейсом, а не самим кодом.

Ответ №2:

Часто эта проблема может возникнуть из-за нескольких экранов или проблем с разницей в разрешении. Если вы используете ноутбук, подключенный к экранам, попробуйте нажать кнопку на ноутбуке, когда он отключен от ваших мониторов. Если это устранит проблему, убедитесь, что у вас одинаковое разрешение и/или масштабирование между двумя настройками.

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

Комментарии:

1. Хорошая мысль. В моем случае это просто ноутбук без дополнительного экрана. Масштабирование составляет 250%, как стандартная рекомендуемая настройка. 100% — это крошечный шрифт на экране 4k.

Ответ №3:

Решено — оказалось, что мне нужно было установить флажок «Включить макросы Excel 4.0». По-видимому, Microsoft только что начала отключать это по умолчанию в Office 365, начиная с этого месяца!

Так и в Excel… Файлgt;gt;gt;Параметрыgt;gt;gt;gt;gt;gt;gt; gt; Центр доверияgt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;Настройки Центра доверияgt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;gt;Настройки макросов

Комментарии:

1. Вам не следует использовать макросы Excel 4.0. Они сильно отличаются от VBA. Они также не уверены в себе. Эту опцию необходимо всегда отключать. Используйте только VBA. Решение, которое я предоставил, — это решение VBA, для которого не требуется эта небезопасная настройка.

2. Соглашаться. Насколько мне известно, я не думаю, что использую макросы Excel 4.0. Я даже не знаю, что это такое. У меня просто обычный VBA, и я следую всем вашим предложениям в вашем посте. Все, что я знаю, это то, что когда я включаю Excel 4.0, кнопки снова запускают мой код VBA. И когда я отключаю его, кнопки перестают работать. (Кстати, как я могу определить, есть ли у меня какой-либо макрокод Excel 4.0?)

3. Ты бы знал. Это код, записанный в ячейки, как формула. Он вообще не использует окно VBA.

4. Хорошо, хорошо — спасибо. Тогда я не использую макросы Excel 4.0. Понятия не имею, почему я должен включать его, чтобы мои кнопки работали, но такова жизнь

5. Я тоже собираюсь это проверить: мои кнопки и флажки также продолжают отключаться от своих макросов (кнопки в строке пользовательского меню продолжают запускать те же макросы без проблем).

Ответ №4:

Что-то, что нужно попробовать: Убедитесь, что ваши фигуры «вызывающего абонента» имеют уникальные имена
Примечание: Возможно иметь несколько фигур с одинаковым именем и (по какой-либо причине), которые могут запутать соединение формы excel с макросом.

Дополнительная информация 1.
Если вы используете объект «сгруппированные фигуры» в качестве элемента управления, вы должны присвоить одно и то же имя всем фигурам в группе.

Дополнительная информация 2:
Первоначальным симптомом операции было просто «Макросы … перестали работать с помощью кнопок». С тех пор операция была обновлена и показывает сообщение об ошибке. Описанное здесь отключение из-за неуникального именования не вызывает сообщения об ошибке. Скорее всего, симптомы могут быть следующими: а) макрос вообще не запускается или б) объект «вызывающий» в вызываемом макросе недействителен.

Комментарии:

1. Хорошая идея. Я запустил программу для поиска двойников, нашел пару и переименовал их, но не исправил проблему