Excel VBA比较两个单元格的日期时出错

时间:2015-08-20 17:22:36

标签: excel-vba runtime-error vba excel

在我的工作表列B:C中允许日期。我正在尝试创建一个检查,看看在C中输入的日期是否比B更新,如果这么好,否则提醒用户并清除内容。 我的代码在application.intersect行中返回运行时错误91: Private Sub Worksheet_Change(ByVal Target As Range)     昏暗的日期作为范围     设置日期=范围(“C4:C12”)     如果Target.Cells.Count> 1或IsEmpty(目标)然后     退出子     万一     如果不是Application.Intersect(日期,范围(Target.Address))。值> ActiveCell.Offset(0,-1).Value然后     GoTo DatesMissMatch     其他         退出子     万一 DatesMissMatch:     Target.ClearContents     ActiveCell.Value =“A2”     MsgBox“请重新查看日期” 结束子

3 个答案:

答案 0 :(得分:2)

我改变了你的方法,但这似乎有效。

我还注意到您将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

如果你想坚持你目前正在做的方式,那么我认为你需要检查交叉点是否为空,因为另一个答案结束。

答案 1 :(得分:1)

您可以循环行并比较日期。

Dim ws As Excel.Worksheet
Set ws = Application.ActiveSheet

Dim lRow As Long
lRow = 4
Do While lRow <= ws.UsedRange.Rows.count
    If ws.Range("C" & lRow).Value > ws.Range("B" & lRow).Value then
         GoTo DatesMissMatch
    End if
lRow = lRow + 1
Loop

答案 2 :(得分:1)

我相信你只需检查相交而不是比较。

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)) Is Nothing Then
        If Target.Value < Target.Offset(0, -1).Value Then
            GoTo DatesMissMatch
        Else
            Exit Sub
        End If
    End If

DatesMissMatch:
    Target.ClearContents
    ActiveCell.Value = "A2"
    MsgBox "Please re-check dates"
End Sub