【问题标题】:Run Time Error '13: Type Mismatch when comparing Dates - EXCEL VBA运行时错误 '13:比较日期时类型不匹配 - EXCEL VBA
【发布时间】:2016-12-11 20:26:01
【问题描述】:

比较两个日期时,我不断收到“运行时错误 '13':类型不匹配”错误。该代码从第二个工作簿中获取一个日期,在这种情况下,我试图将其粘贴到一个单元格中以确保它是一个日期......它是。然后它会尝试将其与当前工作簿上已有的日期进行比较。粘贴的日期和其他日期的格式相同。我不知道为什么它不能比较两个日期!我还尝试将 CDate() 放在每个组件周围,但无济于事。请帮忙。

Sub NewMacro()
Dim CurrentWB As Workbook
Dim ForecastWB As Workbook
Dim strDate As Date

Set CurrentWB = ActiveWorkbook

Application.DisplayAlerts = False
Set ForecastWB = Workbooks.Open("My Other Workbook File Name")
Application.DisplayAlerts = True
strDate = ActiveWorkbook.Worksheets("My Sheet Name").Cells(20, "N").Value

ThisWorkbook.Activate

If Cells(5, 5) = Range("A:A") Then 'TYPE MISMATCH HERE
    Set x = Range("A:A").Find(what:=Cells(5, 5), lookat:=xlWhole)
    Cells(x, 5) = strDate
End If

End Sub

【问题讨论】:

  • 请检查IsDate() 的两个日期是否为真...有可能至少有一个日期被视为字符串...请参阅THIS
  • Cells(5, 5) = Range("A:A") 不会将单个单元格与整个列进行比较吗? Cells(5, 5) = Range("A1") 工作。
  • @DarrenBartrup-Cook 就是这样一个 :) 写下来
  • @DarrenBartrup-Cook 是的!我正在尝试在一系列单元格中查找日期!这不是办法吗?

标签: excel vba types mismatch


【解决方案1】:

根据我在您的代码中可以读到的内容: Cells(5, 5) = Range("A:A") - 您不能将单个值与一整列值进行比较。

Cells(x, 5) = strDate - x 是一个范围对象,而不是行号。请改用x.Row

如果未找到 Cells(5,5) 中的值,则 x 将等于 nothing 导致此行出现错误:Cells(x, 5) = strDate

尝试修改此代码:

Sub Test()

    Dim x As Range

    With ThisWorkbook.Worksheets("Sheet1")
        Set x = .Range("A:A").Find(What:=.Cells(5, 5), LookIn:=xlValues, LookAt:=xlWhole)
        If Not x Is Nothing Then
            .Cells(x.Row, 5) = CDate("5 Aug 2016")
        End If
    End With

End Sub

它将在Sheet1 中的A 列中搜索单元格Sheet1!E5 中的值。然后它将05/08/2016 放在它找到的行的第五列中。

With...End With: https://msdn.microsoft.com/en-us/library/wc500chb.aspx

【讨论】:

  • 非常感谢达伦!这很完美。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多