Recordset オブジェクトで、先頭レコードまたは終了レコードを超えて移動しようとすると、実行時エラーが発生します。 たとえば、Recordset の最後のレコードに既にあるときに MoveNext メソッドを使用しようとすると、トラップ可能なエラーが発生します。 このような理由から、Recordset オブジェクトの境界を調べることができると便利です。
BOF プロパティは、現在の位置が Recordset の先頭にあるかどうかを示します。 BOF が True の場合、現在位置は Recordset の先頭レコードよりも前です。 BOF プロパティは、開いている Recordset にレコードがない場合にも True になります。
同様に、現在の位置が Recordset の最後のレコードの後にある場合、またはレコードがない場合、EOF プロパティは True です。
次のコード例は、 BOF プロパティと EOF プロパティを使用して Recordset オブジェクトの先頭と末尾を検出する方法を示しています。 このコードは、カレント データベース内の [受注] テーブルに基づいてテーブル タイプの Recordset を作成します。 Recordset の先頭から終端に向かってレコード間を移動し、終了すると今度は Recordset の終端から先頭に向かって移動します。
Dim dbsNorthwind As DAO.Database
Dim rstOrders As DAO.Recordset
Set dbsNorthwind = CurrentDb
Set rstOrders = dbsNorthwind.OpenRecordset("Orders")
' Do until ending of file.
Do Until rstOrders.EOF
'
' Manipulate the data.
'
rstOrders.MoveNext ' Move to the next record.
Loop
rstOrders.MoveLast ' Move to the last record.
' Do until beginning of file.
Do Until rstOrders.BOF
'
' Manipulate the data.
'
rstOrders.MovePrevious ' Move to the previous record.
Loop
最初のループの直後に現在のレコードがないことに注意してください。 BOF プロパティと EOF プロパティの両方に次の特性があります。
Recordset を開いたときにレコードが含まれていない場合、BOF と EOF の両方が True になります。
BOF または EOF が True のとき、既存のレコードに移動するまでプロパティは True のままで、移動した時点で BOF または EOF の値は False になります。
BOF または EOF が False で、Recordset 内のただ 1 つのレコードが削除されたとき、別のレコードに移動するまでプロパティは False のままであり、移動した時点で BOF と EOF の両方が True になります。
少なくとも 1 つのレコードを含む Recordset を作成した時点または開いた時点では、先頭のレコードがカレント レコードであり、BOF と EOF はどちらも False です。
MovePrevious メソッドを使用するときに先頭のレコードがカレント レコードだと BOF は True に設定されます。 BOF が True のときに MovePrevious を使用すると、実行時エラーが発生します。 この場合、BOF は True のままであり、カレント レコードは存在しません。
同様に、Recordset の最終レコードを超えて移動すると、EOF プロパティの値が True に変化します。 EOF が True のときに MoveNext メソッドを使用すると、実行時エラーが発生します。 この場合、EOF は True のままであり、カレント レコードは存在しません。
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。