Доступ к блоку vba, выполняющемуся, когда он не должен - PullRequest
1 голос
/ 29 июля 2011

У меня есть подпрограмма, которая запускается, когда я нажимаю кнопку в форме. Проблема в том, что независимо от того, что происходит, блок ошибок выполняется, и я не могу понять, почему. Я не очень хорош с Access VBA, так что это может быть простая ошибка.

Вот мой саб:

Public Sub findRecord()

    Dim rs As DAO.Recordset

    Set rs = Me.[dbo_NCL_SimmonsCodes subform1].Form.Recordset

    rs.FindFirst "NCL_ItemNum=""LSIM-" & Me.Text0 & """"

    If rs.NoMatch Then

         MsgBox "No match found.  Please try again." & vbNewLine & vbNewLine & "If this is a new item, please click the Add Record button to add.", vbInformation, "No Match"

    End If

On Error GoTo description_Error

    Me.lblDescription.Caption = DLookup("Description", "dbo_AL_ItemUPCs", "ItemCode ='" & Me.Text0 & "'")

Exit_FindRecord:
    Exit Sub

description_Error:

        MsgBox "Error " & Err.Number & ": " & Err.Description & vbNewLine & vbNewLine, vbExclamation, "VBA Error " & Err.Number
        Me.lblDescription.Caption = "Error."
        Resume Exit_FindRecord

End Sub

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Это действительно странное поведение.

Я бы посоветовал вам изменить поведение «Перехват ошибок» в VBA с «Разрыв по неосторожным ошибкам» на «Перерыв по всем ошибкам», чтобы узнать, есть ли что-нибудь еще, что вызывает ошибки.

Еще одна вещь, которую нужно сделать, чтобы проверить, где именно проблема, - это разрезать код. Моим первым предложением было бы удалить строку изменения подписи и повторно запустить сабвуфер, чтобы проверить, все ли еще происходит поведение.

Кроме того, убедитесь, что весь проект компилируется. Если нет, VBA может легко представить странное поведение.

Измените это и дайте нам знать, что происходит ... Я не вижу ничего плохого в коде.

0 голосов
/ 29 июля 2011

На самом деле выглядит как логическая ошибка.Если оператор FindFirst не имеет соответствия, он должен выйти из процедуры вместо продолжения.Я добавил 'Exit Sub' под этим окном сообщений, и теперь я в порядке.

Public Sub findRecord()

    Dim rs As DAO.Recordset

    Set rs = Me.[dbo_NCL_SimmonsCodes subform1].Form.Recordset

    rs.FindFirst "NCL_ItemNum=""LSIM-" & Me.Text0 & """"

        If rs.NoMatch Then
                MsgBox "No match found.  Please try again." & vbNewLine & vbNewLine & "If this is a new item, please click the Add Record button to add.", vbInformation, "No Match"
                Me.lblDescription.Caption = "Error - No match."
                Exit Sub      
                '^^Added^^'
        End If

On Error GoTo description_Error

            Me.lblDescription.Caption = DLookup("Description", "dbo_AL_ItemUPCs", "ItemCode ='" & Me.Text0 & "'")

Exit_FindRecord:
        Exit Sub

description_Error:
        MsgBox "Error " & Err.Number & ": " & Err.Description & vbNewLine & vbNewLine, vbExclamation, "VBA Error " & Err.Number
        Me.lblDescription.Caption = "Error."
        Resume Exit_FindRecord

End Sub
...