如果使用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及更高版本)找到本技巧的版本: