2

これが私の質問です。メイン フォーム内にサブフォームがあります。メイン フォームには顧客番号が含まれ、サブフォームにはその顧客の注文が含まれます。そのため、1 人の顧客が複数の注文を行う場合があります。クリックすると、その顧客の次の注文に移動するボタンを作成したいと考えています。私はコードでこれを行うことに問題はありません:

 Private Sub next_comp_Click()
 [Forms]![Customer]![Order Subform].SetFocus
 DoCmd.GoToRecord , , acNext
  end sub

私が問題を抱えているのは、その顧客の最後の注文に到達したときです。最初の注文にループバックするようにします。これを行うには、次のコードを使用しました:

Private sub next_comp_click()
[Forms]![Customer]![Compressor Subform].SetFocus
Dim dbcustomer As Database
Dim rstorder As Recordset

Set dbcustomer = CurrentDb
Set rstorder= dbcustomer.OpenRecordset("orders", dbOpenSnapshot)
  With rstEmployees
    If .AbsolutePosition = - 1 Then
    MsgBox (.RecordCount)
    'DoCmd.GoToRecord , , acFirst
    Else
    DoCmd.GoToRecord , , acNext
    End If
  End With
 end sub

MsgBox 関数を使用してデバッグを行い、現在のレコードを特定しました (最終的には、コメント アウトされたコードに示されているように、最初のレコードにループ バックするようにします)。最初のレコード、つまり、RecordCount が 1 であることがわかります。私が扱っているほとんどのレコードには複数の注文があるため、これはそうではないはずです。条件を If .AbsolutePosition = 3 のようなものに変更すると、最後のレコードまたは空のレコードに到達するまでレコードが次のレコードに移動し、そこから [次へ] をクリックすると、実行時エラー '2105' が表示されます。指定されたレコードに移動できません。

問題は、 .AbsolutePositon プロパティが正しいフォームまたはテーブルを見ていないことだと思いますが、回答をいただければ幸いです。

前もって感謝します。

4

2 に答える 2

3

フォームが制限されている場合、そのレコードセットは必要ありません。ボタンで次のコードを使用するだけです。

Private sub next_comp_click()
   [Forms]![Customer]![Order Subform].SetFocus
   If [Forms]![Customer]![Order Subform].Form.CurrentRecord >= [Forms]![Customer]![Order Subform].Form.Recordset.RecordCount Then
       DoCmd.GoToRecord , , acFirst
   Else
       DoCmd.GoToRecord , , acNext
   End If
End sub

コードが正確であることを確認するためだけに、これを複製するアクセス データベースを構築しました。これをコピーして貼り付けることができ、機能するはずです。

于 2013-07-31T01:24:52.683 に答える
2

これは、最後のレコードをヒットした後、最初のレコードにループするために行うことです。VBAに入れます。前のボタンを使用する場合は、逆の操作を行ってください。

 If Me.CurrentRecord = Me.Recordset.RecordCount Then
       DoCmd.GoToRecord , , acFirst
   Else
       DoCmd.GoToRecord , , acNext
   End If
于 2014-03-23T18:23:41.223 に答える