Вероятно, с вами случилось следующее: вы открываете книгу, просматриваете некоторые рабочие листы, а затем закрываете книгу. При закрытии Excel спрашивает вас, хотите ли вы сохранить изменения, но вы не внесли никаких изменений — вы только осмотрелись. Что дает?

Внутренне Excel поддерживает то, что обычно называют «грязным флагом». Этот флаг устанавливается всякий раз, когда вы вносите какие-либо изменения в книгу.

Каждый раз, когда вы сохраняете книгу, флаг снимается. Если флаг установлен, когда вы закрываете книгу, Excel спрашивает, хотите ли вы сохранить книгу.

Флаг грязных данных, очевидно, может быть установлен, если вы внесете в книгу некоторые явные изменения, такие как редактирование ячейки или какое-либо изменение структуры книги. Однако его также можно установить, даже если вы ничего не делаете явно. Иногда Excel делает что-то, что влияет на содержимое книги только в силу того факта, что вы ее открыли. Это устанавливает грязный флаг и, таким образом, запускает запрос на сохранение.

Двумя основными виновниками таких автоматических изменений являются функции рабочего листа СЕГОДНЯ и СЕЙЧАС. Они возвращают системную дату и системное время соответственно. Когда вы впервые открываете книгу, они обновляются в ходе обычного пересчета. Поскольку они представляют собой изменение, Excel устанавливает «грязный» флаг. Это только два возможных виновника; есть и другие функции, которые могут иметь то же «эта книга была изменена»

эффект. Неполный список включает INDIRECT, OFFSET, RAND и RANDBETWEEN.

Флаг грязи также может быть установлен автоматически, если ваша книга включает ссылки на данные на других листах. Excel извлекает данные, которые представляют собой изменение в только что открытой книге. Excel не устанавливает флаг загрязнения, если вы просто перемещаетесь по книге, выполняя такие действия, как выбор ячеек или переход на другой рабочий лист.

Один из способов обойти проблему — удалить все, что вызывает изменения в вашей книге. Для большинства людей это просто непрактично.

Вы также можете добавить автоматический макрос, который будет запускаться непосредственно перед закрытием книги, например следующий, который должен быть частью объекта ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

ActiveWorkbook.Saved = True End Sub

Этот макрос не делает ничего, кроме сброса грязного флага (свойство Saved). Хотя этот подход будет работать, его использование сопряжено с огромным риском. С установленным макросом Excel никогда не спросит вас, хотите ли вы сохранить изменения при выходе, даже если в книгу были внесены допустимые изменения. Таким образом, вам нужно не забывать явно сохранять что-либо в книге всякий раз, когда вы вносите изменения. Если вы этого не сделаете, вы можете потерять часть своей работы.

Вариант этого подхода — менее неумолимый по отношению к забытым изменениям — состоит в том, чтобы фактически сделать макрос частью процедуры Workbook_Open для объекта ThisWorkbook:

Private Sub Workbook_Open()

ActiveWorkbook.Saved = True End Sub

Теперь Excel открывает книгу, выполняет пересчет (включая внесение изменений на основе таких функций, как СЕГОДНЯ и СЕЙЧАС), а затем сбрасывает флаг грязных данных. Если вы закроете сразу, вас не спросят, хотите ли вы сохранить изменения. Вас спросят, хотите ли вы сохранить изменения, однако, если вы вносите изменения после запуска этого макроса, другими словами, после того, как рабочий лист был полностью открыт.

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

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

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

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

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

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

Вы можете найти версию этого совета для более старого интерфейса меню Excel здесь: link: / excel-Saving_Non-Existent_Changes [Сохранение несуществующих изменений].