VBA审核跟踪代码抛出参数不是可选错误

姆干根

我已经建立了一个数据库,下面的审核跟踪代码可以在Access 2010中的表单和子表单中正常使用。但是,由于现在我又在另一个数据库中使用了它,因此我首先收到一个错误“ Argument Not Optional” Call如果这两个数据库都以相同的精确方式创建了子表单,为什么要在一个数据库而不是另一个数据库中工作呢?除了不太有用的错误代码之外,我无法获得该数据库来为我提供更多信息。我最好的猜测是,这与它有关,Sub TrainingEntryAuditChanges(IDField As String, UserAction As String, FormToAudit As Form)但我不能真正说出来。就像我说的那样,它只能在一个数据库中工作,但由于某种原因,它不能在一个数据库中工作。有任何想法吗?

模块代码:

***ABOVE CODE OMITTED INTENTIONALLY***
'Audit module code for employee training entry form's sub form
Sub TrainingEntryAuditChanges(IDField As String, UserAction As String, FormToAudit As Form)
On Error GoTo AuditChanges_Err
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim ctl As Control
Dim datTimeCheck As Date
Dim strUserID As String
Set cnn = CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.Open "SELECT * FROM tblAuditTrail", cnn, adOpenDynamic, adLockOptimistic
datTimeCheck = Now()
strUserID = Forms!Login!cboUser.Column(1)

'Get computer IP address
Dim myWMI As Object, myobj As Object, itm
Set myWMI = GetObject("winmgmts:\\.\root\cimv2")
Set myobj = myWMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
    For Each itm In myobj
        getMyIP = itm.IPAddress(0)
    Next

'If user is editing an existing record:
Select Case UserAction
    Case "EDIT"
        For Each ctl In FormToAudit
            If ctl.Tag = "Audit" Then
                If Nz(ctl.Value) <> Nz(ctl.OldValue) Then
                    With rst
                        .AddNew
                        ![DateTime] = datTimeCheck
                        ![UserName] = strUserID
                        ![UserComputer] = getMyIP
                        ![FormName] = FormToAudit.Name
                        ![Action] = UserAction
                        ![RecordID] = FormToAudit.Controls(IDField).Value
                        ![FieldName] = ctl.ControlSource
                        ![OldValue] = ctl.OldValue
                        ![NewValue] = ctl.Value
                        .Update
                    End With
                End If
            End If
        Next ctl

    'If a user is creating a new record:
    Case Else
        With rst
            .AddNew
            ![DateTime] = datTimeCheck
            ![UserName] = strUserID
            ![UserComputer] = getMyIP
            ![FormName] = FormToAudit.Name
            ![Action] = UserAction
            ![RecordID] = FormToAudit.Controls(IDField).Value
            .Update
        End With
End Select


AuditChanges_Exit:
On Error Resume Next
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
Exit Sub

'If error then:
AuditChanges_Err:
Dim strError As String
Dim lngError As Long
Dim intErl As Integer
Dim strMsg As String
strError = Err.Description
lngError = Err.Number
intErl = Erl
strMsg = "Line : " & intErl & vbCrLf & _
       "Error : (" & lngError & ")" & strError
MsgBox strMsg, vbCritical
Resume AuditChanges_Exit

End Sub

子窗体上的Before_Update代码:

Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord Then
    Call TrainingEntryAuditChanges("ID", "NEW") ***ERROR THROWN HERE***
Else
    Call TrainingEntryAuditChanges("ID", "EDIT")
End If
End Sub
托皮格

Argument Not Optional当你调用与该程序所需的参数不正确的数字常规异常。

在你的代码中

Sub TrainingEntryAuditChanges(IDField As String, UserAction As String, FormToAudit As Form)

需要三个参数,IDFieldUserAction,和FormToAudit

但是,在您的 Call

Call TrainingEntryAuditChanges("ID", "NEW") ***ERROR THROWN HERE***

您只传递了两个参数:IDNEW您需要将第三个参数传递给它(看起来像是form)。尝试me将第三个参数用作传递正在更新的“当前”格式,因此调用例程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章