导航Access Access VBA中的表记录
问题描述:
我有一个包含两列(值为1和值为2)的表,这些值按照从最低到最高排序。例如:导航Access Access VBA中的表记录
Value1
20
40
43
90
100
122
Value2
4
5
9
10
15
18
我要求用户输入的输入值,然后我计算可在以下任一来计算CalcFinalValue的值:
如果用户输入值已经存在在value1字段中,然后返回字段value2中的相应值。例如,如果用户输入为100,则CalcFinalValue将为15
如果用户输入值不存在于value1字段中,则在value1字段中找到输入值位于它们之间的两个值(例如,如果输入值是42,我想从value1字段找到40和43)。计算CalcFinalValue为: CalcFinalValue =(40 * 9)+(43 * 5)/ 42
换句话说式将是如下: CalcFinalValue =(LowerValue的其间值*查找的值中间值的HigherValue)+(中间值的HigherValue *中间值的LowerValue的查找值)/(用户输入值) 我想在Access 2007 VBA中执行此操作。
我希望这很清楚。感谢您的帮助!
答
Dim rs AS DAO.Recordset
Set rs = CurrentDb.OpenRecordset("TableName", dbOpenTable)
' inp stores the user input value; i counts the number of records that have been accessed
Dim inp, i as Integer
' r2c1 and r2c2 store the data of the second row in case the two-row calculation is needed
Dim r2c1, r2c2 as integer
' Since I mostly use forms for I/O that's what I've used here
' Change this to whatever method you use to get the user input
inp = Forms!FormName.InputTextBoxName.Value
i = 0
rs.MoveFirst
Do While (Not rs.EOF)
i = i + 1
' Check if the user input exists in the table
If (rs.Fields("Value1") = inp) Then
' Again use whatever output method you want
Set Forms!FormName.OutputTextBoxName.Value = rs.Fields("Value1")
End Do
' Otherwise, check if the current value in column 1 is greater than the input
Else If (rs.Fields("Value1") > inp) Then
' If this is true for the first row then the input is less than the lowest number.
' I assume this is out-of-bounds, but use whatever boundary condition you want
If (i = 1) Then
MsgBox("Out of Bounds", vbOkOnly)
Else
' Save the required values from this row
r2c2 = rs.Fields("Value2")
r2c1 = rs.Fields("Value1")
' Goto previous row which and calculate according to your formula
rs.MoveLast
Set Forms!FormName.OutputTextBoxName.Value = (r2c1*r2c2 + rs.Fields("Value1")*rs.Fields("Value2"))/inp
End If
End If
rs.MoveNext
Loop
' If nothing was found, the input was larger than all values in 'Value1'
If (rs.EOF) Then
MsgBox("Out of Bounds", vbOkOnly)
End If
替代值1和值2与任何列名使用