【发布时间】:2015-03-20 00:00:41
【问题描述】:
我不断收到来自我的 Access VBA 代码的错误“无效使用 Null”。此 VBA 代码的目标是遍历一系列包含重复的最大值、最小值、平均值的表,并将平均值字段替换为之前的最大值和最小值字段的绝对最大值。
Left Mx max Left Mx min Left Mx mean Right Mx max Right Mx min Right Mx mean
50.754 -33.002 50.75 50.642 -33.0 50.642
-95.355 -167.889 167.88 -95.822 -168.373 168.373
63.636 -45.956 63.636 63.473 -45.984 63.473
-97.065 -165.954 165.954 -97.442 -166.365 166.365
我拥有的当前代码能够通过单个表,但是一旦到达末尾,我就会收到错误。
当前代码
Sub absolute()
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim fld As DAO.Field
Dim tdf As DAO.TableDef
Dim maximum As Double
Dim minimum As Double
Dim newvalue As Double
Dim newfield As String
Dim newcase As String
Dim sqlStatement As String
Set db = CurrentDb
For Each tdf In db.TableDefs
If Not (tdf.Name Like "MSys*" Or tdf.Name Like "Case" Or tdf.Name Summmary"
Or tdf.Name Like "~*") Then
Set rs1 = tdf.OpenRecordset()
rs1.MoveFirst
While Not rs1.EOF Or Not Null
For Each fld In rs1.Fields
newfield = fld.Name
If newfield <> "case" Then
If Right(newfield, 3) = "max" Then
maximum = rs1(newfield).Value
ElseIf Right(newfield, 3) = "min" Then
minimum = rs1(newfield).Value
ElseIf Right(newfield, 4) = "mean" Then
rs1.Edit
rs1(newfield).Value = iMax(maximum, minimum)
rs1.Update
End If
End If
Next fld
rs1.MoveNext
Wend
End If
Next tdf
Set fld = Nothing
Set rs1 = Nothing
Set rs2 = Nothing
Set db = Nothing
Set tdf = Nothing
End Sub
imax 在哪里:
Public Function iMax(ParamArray p()) As Variant
Dim i As Long
Dim v As Variant
v = p(LBound(p))
For i = LBound(p) + 1 To UBound(p)
If Abs(v) < Abs(p(i)) Then
v = p(i)
End If
Next
iMax = Abs(v)
End Function
此外,如何在当前代码中将字段名称从“mean”更改为“abs”?
编辑
代码停止于:
maximum = rs1(newfield).Value
'where rs1(newfield which is storing left mx max) = null
【问题讨论】: