在If语句中使用日期

时间:2015-07-09 19:53:31

标签: vba ms-access access-vba

此语法显示错误

  

数据类型转换错误

我以为我正在将字符串与字符串进行比较?

Sub Test()

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim dte As Date
Dim formatteddate As String
Set db = CurrentDb
dte = "01/01/2015 00:00:00"
formatteddate = Format(dte, "mm/dd/yyyy")
For Each tdf In db.TableDefs
    If (CurrentDb.TableDefs(tdf).DateCreated <= formatteddate) Then
      Debug.Print tdf.DateCreated
    End If
Next
Set db = Nothing
Set tdf = Nothing

End Sub

1 个答案:

答案 0 :(得分:1)

  

“我以为我正在将字符串与字符串进行比较?”

DateCreated返回日期/时间值,因此比较DateCreated <= formatteddate正在将日期/时间与字符串值进行比较。

但是,这不是错误原因#3421,“数据类型转换错误。”

CurrentDb.TableDefs(Item)中,必须是TableDef的序号或名称属性。 (请参阅Access'帮助系统中的 TableDefs集合主题。)

但是你将 tdf ,一个TableDef对象作为 Item 。这种不匹配会触发错误。您可以通过为 Item 提供 tdf.Name 来避免错误:

CurrentDb.TableDefs(tdf.Name).DateCreated

但是,由于您已经拥有 tdf ,因此无需重新访问CurrentDb.TableDefs ...只需直接询问tdf.DateCreated

这会使错误消失,但在将DateCreated formatteddate 字符串值进行比较时,您将无法获得任何结果。该问题的解决方案是将tdf.DateCreated与日期/时间值进行比较。

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim dte As Date

Set db = CurrentDb
dte = #1/1/2015#
For Each tdf In db.TableDefs
    If tdf.DateCreated <= dte Then
        Debug.Print tdf.Name, tdf.DateCreated
    End If
Next
Set db = Nothing
Set tdf = Nothing