【问题标题】:VBA skipping If statements in Access 2010VBA 在 Access 2010 中跳过 If 语句
【发布时间】:2012-04-27 19:29:40
【问题描述】:

我正在努力做到这一点,以便当用户从组合框中选择一个人时,他们的完整详细信息会显示出来,但是当条件应该返回 true 时,一些错误处理 if 语句继续给出 false

Private Sub ComboOwnerID_Change()
Dim SelID As Integer
Dim rs As DAO.Recordset
Dim db As Database
Dim strSQL As String
Dim result As String
SelID = 0
SelID = Me.ComboOwnerID.Text
If Not (SelID = 0) Then
    If Not (SelID = Null) Then
        Set db = CurrentDb
        strSQL = "SELECT * FROM Owners WHERE OwnerID = " + SelID
        Set rs = db.OpenRecordset(strSQL)
        Do While Not rs.EOF
            result = ""
            result = rs!Title + ". "
            result = result + rs!Forname + " "
            result = result + rs!Surname
            rs.MoveNext
        Loop
        Me.lblOwnerName.Caption = result
    Else
        Me.lblOwnerName.Caption = "error"
    End If
Else
    Me.lblOwnerName.Caption = "error"
End If
End Sub

它甚至还没有达到 SQL 位,所以我不知道它是否有效

【问题讨论】:

    标签: sql vba if-statement conditional-statements ms-access-2010


    【解决方案1】:

    不要在 VBA 中使用 .text 属性,它仅在控件具有焦点时可用。 VBA 中的连接符是 & 不是 +。当其中一个字符串为 null 时使用 + 可以返回 null。

    If Not (SelID = Null) Then
        Set db = CurrentDb
    

    你的意思是:

    If Not IsNull(SelID) Then
        Set db = CurrentDb
    

    【讨论】:

    • 我还要补充一点,我认为SelID 永远不会是 NULL,因为它是一个整数。
    • True,如果组合为空,则会产生问题。此行将失败 SelID = Me.ComboOwnerID.Text,与 .text 值相差甚远。
    • 还要添加到@creamyegg:如果SelID 是一个int,那么If SelID <> 0 Then 不是也比If Not (SelID = 0) Then 更好吗?
    • @Gaffi 我认为问题在于将 selID 标注为整数。空组合的值为 null,因此 selID 应该是变体。
    • + 确实连接了 null + "abc" = nullnull & "abc" = abc。不使用组合的文本属性,那么绑定列的值为Me.MyCombo,或者如果出于宗教原因必须有属性,使用.value Me.MyCombo.Value 无论控件是否有焦点,该属性都可用.当前事件是关于 Access 表单中最有用的事件。
    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多