Ms access VBA审核跟踪代码引发参数非可选错误
我已经建立了一个数据库,下面的审计跟踪代码在Access 2010中完美地适用于表单和子表单。但是现在我在另一个数据库中再次使用它,我现在在第一次调用Ms access VBA审核跟踪代码引发参数非可选错误,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我已经建立了一个数据库,下面的审计跟踪代码在Access 2010中完美地适用于表单和子表单。但是现在我在另一个数据库中再次使用它,我现在在第一次调用时得到一个错误“argumentnotoptional”。如果两个数据库都以相同的方式创建了子表单,为什么这在一个数据库中有效而在另一个数据库中无效?我不能得到数据库给我更多的信息以外的不是那么有用的错误代码。我最好的猜测是它与子培训ingentryauditchanges(IDField作为字符串,UserAction作为字符串,FormToAu
时得到一个错误“argumentnotoptional”。如果两个数据库都以相同的方式创建了子表单,为什么这在一个数据库中有效而在另一个数据库中无效?我不能得到数据库给我更多的信息以外的不是那么有用的错误代码。我最好的猜测是它与子培训ingentryauditchanges(IDField作为字符串,UserAction作为字符串,FormToAudit作为表单)有关
,但我真的不知道。就像我说的,它在一个数据库中工作,但由于某种原因,它不能在这个数据库中工作。有什么想法吗
模块代码:
***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
调用例程时,如果该例程所需的参数数目不正确,则会抛出参数Not Optional
在代码中
Sub TrainingEntryAuditChanges(IDField As String, UserAction As String, FormToAudit As Form)
需要三个参数,IDField
,UserAction
,和FormToAudit
但是,在您的通话中
Call TrainingEntryAuditChanges("ID", "NEW") ***ERROR THROWN HERE***
您只传递了两个参数:ID
,NEW
。您需要向它传递第三个参数(看起来它将是表单
)。尝试使用me
作为第三个参数来传递正在更新的“当前”表单,从而调用例程
Call TrainingEntryAuditChanges("ID", "NEW") ***ERROR THROWN HERE***