-1

レコードが 1 つしかない場合、この式は正しい計算を行いますが、複数のレコードがある場合は、最後に計算されたレコードの値がすべてに反映されますTotal_Time(バインドされていないテキスト ボックス)。私を助けてください。

Private Sub Report_Load()

  strSQL = "SELECT * FROM [q_1ltduty]"
  Set db = CurrentDb
  Set rs = db.OpenRecordset(strSQL)
  rs.MoveFirst
  Do While Not rs.EOF
    'Assigning values of fields to varia
    strtime1 = Op_Time
    strtime2 = Cl_Time
    'This is a simple expression my code has some more detailed calculations
    strhrs = strtime2 - strtime1
    strtotalhrs = strhrs
    'Printing the variable in Total_Time textbox(unbound)
    Me.Total_Time.Value = strtotalhrs
    rs.MoveNext
  Loop
  rs.Close
  db.Close
  Set db = Nothing
  Set rs = Nothing
End Sub

Private Sub Report_Open(Cancel As Integer)

  strSQL = "SELECT * FROM [q_1ltduty]"
  Me.RecordSource = strSQL
  Debug.Print strSQL

  Exit Sub
  ErrHandler:
  MsgBox Err.Description

End Sub 
4

1 に答える 1

0

変数には 1 つのレコードstrtotalhrsの値しか含まれていないstrhrsため、ループを実行するたびに、現在のレコードの値によって前のレコードの値が消去されます。値を消去する代わりにすべきことは、値を追加することです。

ループの前 (まだ実行されていない場合):

strtotalhrs = 0

次に、代わりにループでstrtotalhrs = strhrs

strtotalhrs = strtotalhrs + strhrs

これにより、最後の値ではなく合計が得られます。

于 2013-04-06T17:16:58.263 に答える