2012-06-25 119 views
0

我有一個包含兩列(值爲1和值爲2)的表,這些值按照從最低到最高排序。例如:導航Access Access VBA中的表記錄

Value1 
20 
40 
43 
90 
100 
122 

Value2 
4 
5 
9 
10 
15 
18 

我要求用戶輸入的輸入值,然後我計算可在以下任一來計算CalcFinalValue的值:

  1. 如果用戶輸入值已經存在在value1字段中,然後返回字段value2中的相應值。例如,如果用戶輸入爲100,則CalcFinalValue將爲15

  2. 如果用戶輸入值不存在於value1字段中,則在value1字段中找到輸入值位於它們之間的兩個值(例如,如果輸入值是42,我想從value1字段找到40和43)。計算CalcFinalValue爲: CalcFinalValue =(40 * 9)+(43 * 5)/ 42

換句話說式將是如下: CalcFinalValue =(LowerValue的其間值*查找的值中間值的HigherValue)+(中間值的HigherValue *中間值的LowerValue的查找值)/(用戶輸入值) 我想在Access 2007 VBA中執行此操作。

我希望這很清楚。感謝您的幫助!

回答

0
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與任何列名使用