史蒂文(Steven)需要确保每天4:00 pm至6:30 pm之间没有人将信息输入工作表。他想知道是否有可能使用数据验证来防止用户在每天的特定时间在工作表中输入信息。

有两种一般方法可以解决此问题。一种方法是使用数据验证来检查时间,并允许或禁止数据输入。

。选择工作表中的所有单元格。

。显示功能区的“数据”选项卡。

。单击“数据工具”组中的“数据验证”工具。 Excel将显示“数据验证”对话框。 (请参见图1。)

。使用“允许”下拉列表,选择“自定义”。

。在“公式”框中输入以下内容:

。根据需要在“错误警报”选项卡上进行更改。

。单击确定。

这种方法的问题在于第一步:您需要选择工作表中的所有单元格,以防止在任何单元格中输入数据。另外,如果您已经在任何单元中使用数据验证,则此方法将覆盖那些设置。

由于这些原因,最好使用基于宏的方法。所有这些方法都可以利用事件处理程序来检查是否有任何更改。以下内容依赖于Worksheet_Change事件,这意味着仅当Excel在工作表中检测到更改时才触发该事件。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim sMsg As String

sMsg = "No entries allowed between 4:00 pm and 6:30 pm!"

If Time >= "4:00:00 PM" And Time <= "6:30:00 PM" Then         MsgBox sMsg, vbCritical         With Application             .EnableEvents = False             .Undo   ' This undoes the change the person made             .EnableEvents = True         End With     End If End Sub

本质上,每次工作表中有更改时,处理程序都会检查它是否在4:00 pm和6:30 pm之间。如果是这样,则会显示一个消息框以指示错误,然后使用.Undo方法回滚尝试的任何更改。

如果您愿意,可以采取另一种方法来保护工作表(如果它在禁止的时间内):

Private Sub Worksheet_Activate()

If Time >= "4:00:00 PM" And Time <= "6:30:00 PM" Then         ActiveSheet.Protect         MsgBox "Worksheet is protected."

Else         ActiveSheet.Unprotect         MsgBox "You are free to edit now."

End If End Sub

每次激活(选择)工作表时,都会调用Worksheet_Activate事件处理程序。如果工作表在禁止时间之外的任何时间被激活,则它是不受保护的。当然,即使在禁止的时间内,用户仍然可以手动取消对工作表的保护,因此,最好将这种方法与每次尝试进行更改时触发的方法结合使用,如前所述。

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

本技巧(13503)适用于Microsoft Excel 2007、2010、2013和2016。