У Гильермо есть серия макросов, которые он обычно запускает, и когда он запускает каждый из них вручную, они работают нормально. Он попытался поместить все макросы в макрос «RunAll» (так что ему нужно было запустить только один макрос вместо шести отдельных макросов), и теперь один из них не работает должным образом. Когда он выполняет макрос RunAll, он получает сообщение об ошибке, что ячейка защищена и доступна только для чтения. Однако на листе нет защиты, и если он запускает макросы индивидуально, он не получает ошибку.

Само собой разумеется, что макрос, который отлично выполняется индивидуально, но не в сочетании с другими, обнаруживает что-то, что заставляет его работать неправильно. Вероятно, это означает, что макрос, запущенный до того, как он покидает книгу, находится в другом состоянии, чем он был бы, если бы вы запускали макросы по отдельности.

Например, если некорректный макрос запускается третьим в серии, проверьте первые два макроса, чтобы узнать, что они делают. Меняют ли они выделенные ячейки? Меняют ли они активный рабочий лист? Меняют ли они какие-либо условия, которых ожидает третий макрос? Любой из них может привести к неправильной работе третьего макроса.

Это второе предложение — об активном листе — это наиболее вероятный сценарий. Когда вы запускаете макрос по отдельности, велика вероятность, что вы запустите его с конкретным активным листом. Однако другие макросы могут изменить активный рабочий лист на другой, и этот другой рабочий лист может быть тем, к которому применена защита.

Решение состоит в том, чтобы проверить каждый макрос, чтобы убедиться, что он сохраняет информацию о местоположении (рабочий лист, активная ячейка, выбранные ячейки и т. Д.)

прежде чем вносить какие-либо изменения в любой из них. После сохранения их легко восстановить в конце макроса.

Если это по-прежнему не помогает, вам может потребоваться отладка. В макросе «RunAll» используйте редактор VBA, чтобы установить точку останова в строке, которая вызывает сбойный макрос. Затем вы можете использовать «Шаг с заходом»

, чтобы войти в макрос и выяснить, где произошел сбой. Обратите особое внимание на лист и ячейки, которые макрос пытается изменить, а затем посмотрите, сможете ли вы выяснить, что происходит с предыдущими макросами, чтобы привести к этому листу и ячейкам. Вы можете использовать любую из следующих строк в окне «Немедленное», чтобы узнать, где вы находитесь:

? ActiveSheet.Name ? ActiveCell.Address

Хотя отслеживание этих типов ошибок может быть сложной задачей, свет в конце туннеля говорит о том, что вы получите отлично работающий макрос «RunAll», который может сэкономить вам много времени.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (12710) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.