0

わかりましたので、可能な限り自動化するために VBA コードを作成しようとしています。私がする必要があるのは、テーブルのフィールドから読み取り、条件を満たしていれば、それを新しいテーブルにコピーすることです。回転目的です。CurrentDateそのアイテムの値と等しい場合NextDateOut、特定のテーブルに移動したいだけでなく、現在のテーブルの値を更新したいと考えています。 NextDateOutテーブルの新しいLastDateOut値になりNextDateIn、NextDateIn からNextDateOut10 日後、それから 10 日後になります。これの数学ロジックを書くことができます。これは、テーブルの値を現在の定数と比較し、値CurrentDateを更新し、条件が満たされたときに値を特定のテーブルに書き込むだけです。

これまでのコードは次のとおりですが、それを理解しようとしても多くの間違いがあります。

Option Explicit
Sub Run()
    'Declarations for grabbing data from the database for the VBA
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim strSQL As String

    'Open connection to current Access database
    Set db = CurrentDb()

    'Declarations for variables to deal with dates
    Dim CurrentDate As Date
    Dim NextDateOut As Date
    Dim NextDateIn As Date
    Dim LastDateOut As Date
    Dim LastDateIn As Date

    'Setting a consistant value, technically not a constant value since there's no "const"
    CurrentDate = Date

    'Will take this out eventually
    MsgBox (CurrentDate)

    strSQL = "SELECT Next Date Out FROM Tapes Where Next Date Out = CurrentDate"
    Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)
    With rst
    If .RecorCount > 0 Then
        .MoveFirst
        .Edit
        !Next Date Out = (CurrentDate+20)
      .Update
    End If
    End With
End Sub

前もって感謝します!!!順調に進んでいますが、途中で壁にぶち当たります。再度、感謝します!!!

4

1 に答える 1

0

これはクエリで直接解決できると思います。

この問題をいくつかのステップに分けてみましょう:

NextDateOut(テーブル内のフィールド) が (コード内の変数) と等しい場合currentDate:

  1. 条件が真であるすべてのレコードを新しいテーブルに移動する必要があります
  2. テーブルに残っているレコードについては、 、、およびに更新LastDateOutする必要があります。currentDatenextDateIncurrentDate + 10nextDateOutcurrentDate + 20

これが正しければ、これを試すことができます:

dim strSQL as String
dim currentDate as Date
...
' Step 1: Copy the records to a new table '
strSQL = "insert into otherTable " & _
         "select * from tapes " & _
         "where [nextDateOut]=" & CDbl(currentDate)
doCmd.runSQL strSQL

' Step 2: Delete the records just copied '
strSQL = "delete from tapes where [nextDateOut]=" & CDbl(currentDate)
doCmd.runSQL strSQL

' Step 3: Update the dates in ALL the records remaining the "tapes" table '
strSQL = "update tapes " & _
         "set [lastDateOut]=" & CDbl(currentDate) & ", " & _
         "set [nextDateIn]=" & CDbl(currentDate + 10) & ", " & _
         "set [nextDateOut]=" & CDbl(currentDate + 20)
doCmd.runSQL strSQL
...

注:日付形式の問題を回避するために使用CDbl(currentDate)します (MS Access は日付を double 値として格納し、整数部分は日を表し、小数部分は日の端数を表します)

これがお役に立てば幸いです

于 2013-01-11T21:40:39.270 に答える