プロが教えるわが家の防犯対策術!

教えてください!!MS accessにてサブフォームのレコードの数やレコードの内容をVBAにて取得したいと考えてます。その結果によって、条件分岐がしたいので・・・。現在は、サブフォームのフッターに=count(*)のテキストボックスを作り、この値を取得しています。もう少しスマートに(直接)取得できないのでしょうか?ちなみに(サブフォームの)コントロール名.form.countでやってみると、違う数字が出てきます。この数字はいったいなんでしょうか?
お願いします。

A 回答 (2件)

#1のsghです。


もっとシンプルな方法があったので、アップしておきます。

Private Sub コマンド1_Click()
Me.RecordsetClone.MoveLast
MsgBox Me.RecordsetClone.RecordCount
End Sub

#1の回答1と同じ考え方ですが、これだとDAOの参照も不要のようです。
コードの例は、開いているフォーム自身のレコードを参照しているので、
サブフォームを参照するように書き換えてください。
    • good
    • 0

うろ覚えですが、最後のレコードまで移動しないと、直接カウントを取っても


ご質問の通り、正しい値は帰ってこないと思います。
私なら、以下の方法を使います。

1."RecordsetClone"を使って、下記の例のように"MoveLast"をかけてから、カウントを取る。
(例)
Private Sub コマンド1_Click()
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Set DB = CurrentDb
Set RS = Me.RecordsetClone
RS.MoveLast
MsgBox RS.RecordCount
End Sub

2.直接SQL文で数える
(例)
Private Sub コマンド1_Click()
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim StSQL As String
Set DB = CurrentDb
StSQL = "select count(*) as 件数 from テーブル1"
Set RS = DB.OpenRecordset(StSQL)
MsgBox RS!件数
End Sub

参考になれば幸いです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A