VBA数据类型不匹配错误13

时间:2015-08-08 00:09:59

标签: string vba date ms-access

我已多次查看这段代码,并且不确定为什么字符串没有转换为数据结构日期。请帮助解释为什么会发生这种情况。我试图连接“#”& dataFROM&最后搜索中的“#”where子句以另一种形式工作。可能是If语句中的复杂条件使得它更有效。

Private Sub txtTHRU_AfterUpdate()
Dim dataFROM As Date
Dim dataTHRU As Date
Dim myLabelsExpiration As String
dataFROM = txtFROM.Value
dataTHRU = txtTHRU.Value
If dataFROM Is Not Null And dataTHRU Is Not Null Then
myLabelsExpiration = "Select * from [Members] where ([Expire] Between #" & dataFROM & "# AND #" & dataTHRU & "#)"
Me.MembersWithFriendsSubform.Form.RecordSource = membershipCutoff
Me.MembersWithFriendsSubform.Form.Requery
End If
End Sub

4 个答案:

答案 0 :(得分:1)

在VBA和SQL之间处理Null的方式不同。

以下逻辑表达式在VBA中不起作用:

If dataFROM Is Not Null And dataTHRU Is Not Null Then

更改为使用IsNull()布尔函数:

If IsNull(dataFROM) And IsNull(dataTHRU) Then

答案 1 :(得分:0)

使用CDate。它使用起来相当简单。如果您的字符串是" 2015年8月7日",您可以这样做:

CDate("August 7, 2015")

在您的具体情况下,它会是这样的:

dataFROM = CDate(txtFROM.Value)
dataTHRU = CDate(txtTHRU.Value)

编辑:您还应该查看DateValueTimeValue。这些可以以非常类似的方式使用,以获得日期或时间。当我试图专门分开日期和时间时,我会使用它们。否则,我主要使用CDate。

答案 2 :(得分:0)

您无法将Date的变量设置为Null。

此外,您不需要日期值,而是字符串表达式。因此:

Private Sub txtTHRU_AfterUpdate()

    Dim dataFROM As String
    Dim dataTHRU As String
    Dim myLabelsExpiration As String

    If Not IsNull(Me!txtFROM.Value +  Me!txtTHRU.Value) Then
        dataFROM = Format(Me!txtFROM.Value, "yyyy\/mm\/dd")
        dataTHRU = Format(Me!txtTHRU.Value, "yyyy\/mm\/dd")
        myLabelsExpiration = "Select * From [Members] Where [Expire] Between #" & dataFROM & "# And #" & dataTHRU & "#"

        If Me!MembersWithFriendsSubform.Form.RecordSource = membershipCutoff Then
            Me!MembersWithFriendsSubform.Form.Requery
        Else
            Me!MembersWithFriendsSubform.Form.RecordSource = membershipCutoff
        End If
    End If

End Sub

答案 3 :(得分:-1)

而不是 如果dataFROM 不为空,则dataTHRU不为空 尝试使用 如果 Not IsNull (dataFROM)而不是IsNull(dataTHRU)那么