【问题标题】:Type mismatch error when assigning date to variable将日期分配给变量时出现类型不匹配错误
【发布时间】:2019-03-28 14:00:25
【问题描述】:

我正在尝试遍历“G”列中的到期日期,并将它们与今天的日期进行比较。每当我运行它时,代码都会循环 363 次,但它会在 ExpirationDate = Cells(x, "G").Value 处停止,并给我一个类型不匹配的错误。

“G”列中的所有单元格都标记为日期,ExpirationDate 也是如此。我可以看到代码始终停止的行与成功通过代码的行之间没有区别。

    For x = 13 To numrows
        reminderrows = Worksheets("Reminders").Cells(Rows.Count, "A").End(xlUp).Row
        expiredrows = Worksheets("Expired").Cells(Rows.Count, "A").End(xlUp).Row
        Worksheets("Training Log Test").Activate

        ExpirationDate = Cells(x, "G").Value

        If ExpirationDate > today And ExpirationDate <= ninetydays Then
            Rows(x).Copy
            Worksheets("Reminders").Activate
            Worksheets("Reminders").Cells(reminderrows + 1, 1).Select
            ActiveSheet.Paste

        ElseIf today >= ExpirationDate Then
            Rows(x).Copy
            Worksheets("Expired").Activate
            Worksheets("Expired").Cells(expiredrows + 1, 1).Select
            ActiveSheet.Paste
        Else
        End If
    Next       
End Sub

【问题讨论】:

  • 出现错误时单元格中的实际值是多少?你试过ExpirationDate = CDate(Cells(x, "G").Value)吗?
  • 请显示您声明的变量。您使用的是序列日期还是仅日期?您正在处理的行数是多少?
  • 标记为日期并不意味着日期。经常使用文本格式的日期或来自不是系统区域设置的区域设置的日期等看到这一点。
  • 您可以使用IsDate()函数检查单元格中的值是否为日期。这将帮助您排除故障。
  • Debug.Print TypeName(ExpirationDate) 输出Date 还是String?是否在任何地方声明?使用显式类型?如果是这样,请注意应将单元格值读入Variant,以免在尝试将工作表错误值(例如#REF!)读入Date 时出现类型不匹配错误、String 或任何其他类型。

标签: excel vba


【解决方案1】:

请尝试替换以下行:

 ExpirationDate = Cells(x, "G").Value

用这个:

ExpirationDate = Cells(x,7).Value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2019-08-10
    相关资源
    最近更新 更多