【问题标题】:VBA Datatype Mismatch Error 13VBA 数据类型不匹配错误 13
【发布时间】:2015-10-31 12:30:36
【问题描述】:

我已经多次查看这段代码,但不确定为什么字符串没有转换为数据结构日期。请帮助解释为什么会发生这种情况。我试图在以另一种形式工作的最终搜索 where 子句中连接“#”和 dataFROM 和“#”。可能是 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

【问题讨论】:

    标签: string vba date ms-access


    【解决方案1】:

    VBA 和 SQL 对 Null 的处理方式不同。

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

    If dataFROM Is Not Null And dataTHRU Is Not Null Then
    

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

    If IsNull(dataFROM) And IsNull(dataTHRU) Then
    

    【讨论】:

    • 如果需要,还可以添加真或假条件。例如 IsNull(dataFROM) = False 在输入数据的情况下。但是现在我的 Between where 子句给了我一个名字? MS Access 出错。
    • 想通了。该变量来自另一个代码块。
    【解决方案2】:

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

    CDate("August 7, 2015")
    

    在您的具体情况下,应该是这样的:

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

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

    【讨论】:

    • 我试过这个。 null 给出问题的部分,它突出显示它。
    【解决方案3】:

    您不能将 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
    

    【讨论】:

      【解决方案4】:

      而不是 如果 dataFROM 不为空 并且 dataTHRU 不为空,则 尝试使用 If Not IsNull(dataFROM) And Not IsNull(dataTHRU) Then

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多