#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. Хорошая идея. Я запустил программу для поиска двойников, нашел пару и переименовал их, но не исправил проблему