Джо довольно часто использует функцию EOMONTH, но с тех пор, как он перешел на Excel 2007, у него возникли проблемы. У Джо активен пакет инструментов анализа, и функция EOMONTH сначала работает. Однако, когда он сохраняет свою книгу и открывает ее позже, ячейки, содержащие функцию EOMONTH, выглядят нормально, пока вы не нажмете на них. Затем в строке формул отображается # N / A. Формула исчезла. В этом случае пакет инструментов анализа все еще активен. Это случается не во всех случаях, но игнорировать его слишком часто. Кроме того, у Джо есть коллега, который испытывает ту же проблему с его рабочими тетрадями.

Эта проблема с EOMONTH, по-видимому, возникает из-за изменений, внесенных в функцию EOMONTH в более поздних версиях Excel (Excel 2007 и более поздних версиях).

В более ранних версиях Excel (Excel 2003 и ранее) EOMONTH входил в состав пакета Analysis ToolPak. В более поздних версиях Excel ToolPak больше не требуется; функция является частью самого Excel. Другими словами, вам не нужно активировать Analysis ToolPak, чтобы использовать EOMONTH.

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

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

Microsoft еще ничего не опубликовала в своей базе знаний об этой ошибке. Проблема кажется прерывистой (как отметил Джо), затрагивая книгу только после того, как она прошла от четырех до восьми циклов открытия / редактирования / сохранения.

Решение — открыть книгу и, если проблема не проявляется, использовать «Сохранить как», чтобы сохранить книгу в собственном формате Excel.

(Ну, в формате Excel, родном для Excel 2007 и более поздних версий Excel.) Поскольку с этого момента режим совместимости не используется, проблема не должна возникать снова. Если проблема проявляется, вам нужно будет исправить и перестроить книгу.

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

=A1+31-DAY(A1+31)

=DATE(YEAR(A1),MONTH(A1)+1,1)-1

Если хотите, вы можете создать свою собственную пользовательскую функцию для расчета последнего дня месяца. Ниже приводится один из подходов:

Function LastOfMonth(Any_Date As Date) As Date     ' Returns the date of the last day of     ' the month of the passed date argument

LastOfMonth = DateAdd("d", -1, _       DateAdd("m", 1, Month(Any_Date) _       & "/1/" & Year(Any_Date)))

End Function

Вы захотите убедиться, что вы передаете функции действительную дату, либо указав дату в ячейке, либо заключив буквальную дату в кавычки. Предполагая, что ячейка B7 содержит дату 15.10.18, оба следующих результата вернут один и тот же результат:

=LastOfMonth(B7)

=LastOfMonth("10/15/2018")

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

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

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

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

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