2016-10-27 117 views
0

我在一系列允许用户从一组日期中进行选择的单元格上使用数据验证。日期基于另一个工作表,基本列为Today(),Today() - 1,Today() - 2等,一直到-28。这使下拉选择当前\动态。 虽然我希望做的是使单元格中的每个日期都大于先前的单元格日期,但我只知道如何使用列验证来完成此操作,而且我显然已经使用它来生成动态日期列表。 任何想法? 谢谢 Sample image of spreadsheet使用日期下拉菜单并进行列验证

+0

请出示样品擅长改变以下语句中的行数和列。 – Karpak

+0

Karpak - 截图够了吗? – JazzyN

+0

是的,它应该是足够的 – Karpak

回答

0

你不能这样做使用数据验证。但是,您可以使用VBA执行此操作。按Alt + F11激活VBA编辑器,然后双击要放置该验证的工作表,并在其中输入以下脚本。并保存你的Excel,那么你将有你的验证到位。

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim OldValue As String 
Dim NewValue As String 
Dim PrevCell As String 
Dim CurRow As Integer 
Dim CurCol As Integer 

On Error GoTo Exitsub 
CurRow = Target.Row 
CurCol = Target.Column 

If CurRow = 1 Or CurCol = 1 Then GoTo Exitsub ' if current row not equal to row 1 or current column = 1, no need to validate 

Application.EnableEvents = False 

NewValue = Target.Value 
Application.Undo 
OldValue = Target.Value 
Target.Value = NewValue 
PrevCell = Cells(CurRow, CurCol - 1).Value 

If Trim(NewValue) = "" Then GoTo Exitsub 

If (PrevCell > NewValue) Then 
    MsgBox "Date is less than previous cell", vbCritical, "Error" 
    Target.Value = OldValue 
    GoTo Exitsub 
End If 
Exitsub: 
Target.NumberFormat = "DD/MMM;@" 
Application.EnableEvents = True 

End Sub 

您可能需要根据您的要求

If CurRow = 1 Or CurCol = 1 Then GoTo Exitsub 
+0

谢谢你。尽管如此,我还是无法使用它。有没有办法连接工作簿,以便看看?是使用日期而不是整数的问题吗? – JazzyN

+0

您可以将工作表作为问题的一部分。 – Karpak

+0

我看不到任何附件选项。在附加之前,你是否需要一定程度的声誉? – JazzyN