Joe经常使用EOMONTH函数,但是自从升级到Excel 2007以来,他就遇到了问题。 Joe首先启用了Analysis ToolPak,并且EOMONTH函数开始起作用。但是,当他保存工作簿并在以后打开它时,包含EOMONTH函数的单元格看起来很好,直到您单击它们为止。然后,编辑栏显示#N / A。公式不见了。发生这种情况时,Analysis ToolPak仍处于活动状态。并非在所有情况下都会发生这种情况,但是这种情况太常见了,无法忽略。另外,乔的一位同事的工作簿也遇到了同样的问题。

显然,由于在更高版本的Excel(Excel 2007和更高版本)中对EOMONTH函数所做的更改,出现了EOMONTH的问题。

在早期版本的Excel(Excel 2003及更低版本)中,EOMONTH是Analysis ToolPak的一部分。在更高版本的Excel中,不再需要ToolPak。该功能是Excel本身的一部分。换句话说,您无需激活Analysis ToolPak即可使用EOMONTH。

这导致了问题。如果您在早期版本的Excel中创建了工作簿,并在更高版本的Excel中使用兼容模式将其打开,则会评估工作簿公式,并在某些情况下会更新用于函数的内部“令牌”。

保存工作簿并退出工作簿时,更新的令牌存储在工作簿中,并且当重新加载工作簿时,令牌现在指向Excel解释为无效函数的位置。

到目前为止,Microsoft尚未在其知识库中发布有关此错误的任何内容。这个问题似乎是间歇性的(如Joe所指出的),仅在工作簿经历了四个到八个打开/编辑/保存周期之后,它才会受到影响。

解决方案是打开工作簿,如果未发现问题,请使用“另存为”以本机Excel格式保存工作簿。

(好吧,采用的是Excel 2007通过更高版本的Excel所固有的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包含日期10/15/18,以下两个结果将返回相同的结果:

=LastOfMonth(B7)

=LastOfMonth("10/15/2018")

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(6613)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。