在我的工作表中,B:C 列允许日期。我正在尝试创建一个检查,以查看 C 中输入的日期是否比 B 更新,如果很好,则警告用户并清除内容。 我的代码在 application.intersect 行中返回运行时错误 91:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Dates As Range
Set Dates = Range("C4:C12")
If Target.Cells.Count > 1 Or IsEmpty(Target) Then
Exit Sub
End If
If Not Application.Intersect(Dates, Range(Target.Address)).Value > ActiveCell.Offset(0, -1).Value Then
GoTo DatesMissMatch
Else
Exit Sub
End If
DatesMissMatch:
Target.ClearContents
ActiveCell.Value = "A2"
MsgBox "Please re-check dates"
End Sub
最佳答案
我改变了你的方法,但这似乎有效。
我还注意到您将 A2
写入 ActiveCell
而不是 Target
。您是否希望 C 列中的单元格在输入无效数据时更新,或者您是否希望它成为您移动到的任何单元格发生更改的位置?
无论如何,这是我想出的一个方法
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Or IsEmpty(Target) Then
Exit Sub
End If
If Target.Column = 3 Then 'Check to see if column C was modified
If Target.Value < Target.Offset(0, -1).Value Then
Target.ClearContents
Target.Value = "A2"
MsgBox "Please re-check dates"
End If
End If
End Sub
如果您想坚持当前的做法,那么我认为您需要检查交集是否不为空,正如另一个答案的结论。
关于Excel VBA 比较两个单元格的日期时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124511/