限制先前日期的输入(Microsoft Excel)
如果使用Excel的数据验证功能,则可以基于另一个单元格的内容来限制单元格中的内容。例如,您可以根据单元格A1中的日期轻松限制进入单元格A2的内容。请按照下列步骤操作:
。选择单元格A2。
。从数据菜单中选择验证。 Excel将显示“数据验证”对话框。
。确保显示设置选项卡。 (请参见图1。)
。使用“允许”下拉列表,选择“日期”。
。使用数据下拉列表,选择大于或等于。
。在开始日期框中,输入= A1。这将告诉Excel日期必须大于或等于单元格A1中的任何日期。
。单击确定。
现在,只要您尝试在单元格A2中输入的日期早于单元格A1中的日期,Excel就会显示一条错误消息,并且不允许输入日期。
但是,当您想限制可以在单元格A1中输入的日期时,会发生什么情况?例如,如果您将日期4/1/04放在单元格A1中,并且要确保在A1中输入的下一个日期不早于4/1/04。如果在单元格A1中放置一个日期(例如4/15/04),则可以,但是下一次在单元格A1中输入日期时,您不希望它早于4/15/04。换句话说,您要确保单元格A1只能接受晚于A1中当前日期的日期。
这有点粘性。如果您按照上述步骤操作,但在步骤1中选择了单元格A1,则数据验证将无法进行。为什么?由于您在单元格A1中输入的日期将始终大于或等于您在A1中输入的日期-在进行数据验证时,Excel不会与A1中的上一个日期进行比较。
解决此问题的唯一方法是使用两个宏。首先,将以下宏放在常规模块中:
Sub Date_Validation() Dim dteDate As Date Dim strDate As String With Range("A1") ' Memo original date dteDate = CDate(.Text) ' Create date string strDate = Format(dteDate, "m\/d\/yy") With .Validation ' Delete old settings .Delete ' Set new data validation .Add _ Type:=xlValidateDate, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlGreaterEqual, _ Formula1:=strDate .IgnoreBlank = False .InCellDropdown = True .InputTitle = "" .ErrorTitle = "Invalid Date Entry" .InputMessage = "" .ErrorMessage = _ "Date is older than the previous date (" & _ dteDate & ")." .ShowInput = True .ShowError = True End With End With End Sub
此宏需要由另一个宏调用,该宏位于工作表的代码窗口中,以便每次工作表发生更改时都将触发该宏:
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Target = Range("A1") Then Date_Validation End Sub
这些宏的工作方式确实很有趣。因为您将后一个放置在工作表的代码窗口中,所以每次对工作表进行更改时都会触发该事件。如果要更改的单元格是A1,则运行Date_Validation宏。
Date_Validation宏从单元格A1中获取日期,并为该单元格构建数据验证规则。这就是它的全部功能-设置数据验证规则,该规则将不允许在单元格中输入的日期早于当前在单元格中的日期。
宏的优点在于,一旦数据验证规则生效,则下次更改单元格A1时,将在触发Worksheet_Change事件之前触发数据验证规则。因此,数据验证规则确保只能输入大于当前日期的日期。清除数据验证后,宏将负责重置数据验证规则,因此它将与新输入的日期进行比较。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(2960)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: